openbill 0.1.4 → 0.1.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 (701) hide show
  1. data/.actionScriptProperties +26 -0
  2. data/.flexProperties +2 -0
  3. data/.gitignore +4 -0
  4. data/.loadpath +7 -0
  5. data/.project +24 -0
  6. data/CONTRIBUTORS +6 -0
  7. data/INSTALL +11 -0
  8. data/LICENSE +20 -20
  9. data/README +63 -63
  10. data/Rakefile +51 -0
  11. data/VERSION +1 -0
  12. data/app/controllers/application.rb +49 -0
  13. data/app/controllers/carts_controller.rb +226 -0
  14. data/app/controllers/products_controller.rb +19 -0
  15. data/app/controllers/sessions_controller.rb +39 -0
  16. data/app/controllers/settings_controller.rb +15 -0
  17. data/app/helpers/application_helper.rb +3 -0
  18. data/app/helpers/carts_helper.rb +5 -0
  19. data/app/helpers/products_helper.rb +2 -0
  20. data/app/helpers/sessions_helper.rb +2 -0
  21. data/app/helpers/settings_helper.rb +2 -0
  22. data/app/models/account.rb +16 -0
  23. data/app/models/billingcycle.rb +7 -0
  24. data/app/models/currency.rb +5 -0
  25. data/app/models/emailtemplate.rb +5 -0
  26. data/app/models/invoice.rb +13 -0
  27. data/app/models/invoicedetail.rb +8 -0
  28. data/app/models/option.rb +5 -0
  29. data/app/models/order.rb +7 -0
  30. data/app/models/orderdetail.rb +11 -0
  31. data/app/models/paymentgateway.rb +5 -0
  32. data/app/models/product.rb +10 -0
  33. data/app/models/registrar.rb +7 -0
  34. data/app/models/registrarlog.rb +6 -0
  35. data/app/models/role.rb +7 -0
  36. data/app/models/server.rb +5 -0
  37. data/app/models/serverlog.rb +6 -0
  38. data/app/models/setting.rb +6 -0
  39. data/app/models/tld.rb +9 -0
  40. data/app/models/transaction.rb +8 -0
  41. data/app/models/user.rb +68 -0
  42. data/app/models/user_mailer.rb +24 -0
  43. data/app/models/user_observer.rb +11 -0
  44. data/app/models/userfieldname.rb +8 -0
  45. data/app/models/userfieldvalue.rb +6 -0
  46. data/app/views/carts/_cart_details.html.erb +36 -0
  47. data/app/views/carts/_check_domain_availability.html.erb +7 -0
  48. data/app/views/carts/_loginbox.html.erb +33 -0
  49. data/app/views/carts/_new_domain_available.html.erb +14 -0
  50. data/app/views/carts/_new_domain_not_available.html.erb +10 -0
  51. data/app/views/carts/_orderinfobox.html.erb +1 -0
  52. data/app/views/carts/_product_details.html.erb +43 -0
  53. data/app/views/carts/_products_list.html.erb +22 -0
  54. data/app/views/carts/_signupbox.html.erb +51 -0
  55. data/app/views/carts/checkout.html.erb +22 -0
  56. data/app/views/carts/customer.html.erb +26 -0
  57. data/app/views/carts/order.html.erb +17 -0
  58. data/app/views/layouts/default.html.erb +43 -0
  59. data/app/views/user_mailer/activation.erb +3 -0
  60. data/app/views/user_mailer/signup_notification.erb +8 -0
  61. data/config/boot.rb +109 -0
  62. data/config/database.yml +20 -0
  63. data/config/environment.rb +76 -0
  64. data/config/environments/development.rb +17 -0
  65. data/config/environments/production.rb +24 -0
  66. data/config/environments/test.rb +22 -0
  67. data/config/initializers/inflections.rb +10 -0
  68. data/config/initializers/mime_types.rb +5 -0
  69. data/config/initializers/new_rails_defaults.rb +17 -0
  70. data/config/initializers/site_keys.rb +38 -0
  71. data/config/locales/en.yml +2 -0
  72. data/config/routes.rb +31 -0
  73. data/db/migrate/20090429095737_create_settings.rb +28 -0
  74. data/db/migrate/20090429102507_create_users.rb +25 -0
  75. data/db/migrate/20090429113405_create_accounts.rb +12 -0
  76. data/db/migrate/20090430091300_create_roles.rb +14 -0
  77. data/db/migrate/20090430103415_create_products.rb +24 -0
  78. data/db/migrate/20090509144706_create_sessions.rb +16 -0
  79. data/db/migrate/20090518070457_create_billingcycles.rb +15 -0
  80. data/db/migrate/20090518105551_create_orders.rb +13 -0
  81. data/db/migrate/20090518105611_create_invoices.rb +17 -0
  82. data/db/migrate/20090518105912_create_orderdetails.rb +24 -0
  83. data/db/migrate/20090518105931_create_invoicedetails.rb +14 -0
  84. data/db/migrate/20090519051441_create_servers.rb +14 -0
  85. data/db/migrate/20090519051509_create_registrars.rb +13 -0
  86. data/db/migrate/20090519051536_create_paymentgateways.rb +13 -0
  87. data/db/migrate/20090519052025_create_tlds.rb +15 -0
  88. data/db/migrate/20090519070149_create_transactions.rb +17 -0
  89. data/db/migrate/20090519070225_create_registrarlogs.rb +16 -0
  90. data/db/migrate/20090519070248_create_serverlogs.rb +16 -0
  91. data/db/migrate/20090519071741_create_emailtemplates.rb +18 -0
  92. data/db/migrate/20090519083539_create_currencies.rb +18 -0
  93. data/db/migrate/20090522102336_create_userfieldnames.rb +16 -0
  94. data/db/migrate/20090522102401_create_userfieldvalues.rb +14 -0
  95. data/db/migrate/20090526092119_create_options.rb +14 -0
  96. data/html-template/AC_OETags.js +292 -0
  97. data/html-template/history/history.css +6 -0
  98. data/html-template/history/history.js +662 -0
  99. data/html-template/history/historyFrame.html +29 -0
  100. data/html-template/index.template.html +121 -0
  101. data/html-template/playerProductInstall.swf +0 -0
  102. data/lib/authenticated_system.rb +189 -0
  103. data/lib/authenticated_test_helper.rb +11 -0
  104. data/lib/tasks/empty +0 -0
  105. data/openbill.gemspec +787 -0
  106. data/pkg/openbill-0.0.0.gem +0 -0
  107. data/pkg/openbill-0.1.3.gem +0 -0
  108. data/pkg/openbill-0.1.4.gem +0 -0
  109. data/public/404.html +30 -0
  110. data/public/422.html +30 -0
  111. data/public/500.html +33 -0
  112. data/public/AC_OETags.js +292 -0
  113. data/public/admin.html +121 -0
  114. data/public/admin.swf +0 -0
  115. data/public/assets/LoadingUndefinedSkin.swf +0 -0
  116. data/public/assets/UndefinedPersonalSkinLoad.swf +0 -0
  117. data/public/assets/blanc.png +0 -0
  118. data/public/assets/botones/Boton_dis.png +0 -0
  119. data/public/assets/botones/PopUpButton.png +0 -0
  120. data/public/assets/botones/PopUpButton1.png +0 -0
  121. data/public/assets/botones/PopUpButton2.png +0 -0
  122. data/public/assets/botones/PopUpButton_0.png +0 -0
  123. data/public/assets/botones/PopUpButton_1.png +0 -0
  124. data/public/assets/botones/PopUpButton_2.png +0 -0
  125. data/public/assets/botones/PopUpButton_dis.png +0 -0
  126. data/public/assets/botones/PopUpMenuButton.png +0 -0
  127. data/public/assets/botones/PopUpMenuButton1.png +0 -0
  128. data/public/assets/botones/PopUpMenuButton2.png +0 -0
  129. data/public/assets/botones/PopUpMenuButton_0.png +0 -0
  130. data/public/assets/botones/PopUpMenuButton_1.png +0 -0
  131. data/public/assets/botones/PopUpMenuButton_2.png +0 -0
  132. data/public/assets/botones/PopUpMenuButton_dis.png +0 -0
  133. data/public/assets/botones/Scroll_barra.png +0 -0
  134. data/public/assets/botones/Scroll_barra1.png +0 -0
  135. data/public/assets/botones/Scroll_barra2.png +0 -0
  136. data/public/assets/botones/Scroll_down.png +0 -0
  137. data/public/assets/botones/Scroll_down1.png +0 -0
  138. data/public/assets/botones/Scroll_fondo.png +0 -0
  139. data/public/assets/botones/Scroll_icon.png +0 -0
  140. data/public/assets/botones/Scroll_up.png +0 -0
  141. data/public/assets/botones/Scroll_up1.png +0 -0
  142. data/public/assets/botones/TabNavigator.png +0 -0
  143. data/public/assets/botones/TabNavigator1.png +0 -0
  144. data/public/assets/botones/TabNavigator2.png +0 -0
  145. data/public/assets/botones/TabNavigator3.png +0 -0
  146. data/public/assets/botones/Thumbs.db +0 -0
  147. data/public/assets/botones/accordion_backround.png +0 -0
  148. data/public/assets/botones/accordion_barra.png +0 -0
  149. data/public/assets/botones/accordion_barra1.png +0 -0
  150. data/public/assets/botones/accordion_barra2.png +0 -0
  151. data/public/assets/botones/accordion_barra3.png +0 -0
  152. data/public/assets/botones/adelante.png +0 -0
  153. data/public/assets/botones/adelante1.png +0 -0
  154. data/public/assets/botones/adelante2.png +0 -0
  155. data/public/assets/botones/adelante_dis.png +0 -0
  156. data/public/assets/botones/atras.png +0 -0
  157. data/public/assets/botones/atras1.png +0 -0
  158. data/public/assets/botones/atras2.png +0 -0
  159. data/public/assets/botones/atras_dis.png +0 -0
  160. data/public/assets/botones/barra.png +0 -0
  161. data/public/assets/botones/barra_dis.png +0 -0
  162. data/public/assets/botones/barra_v.png +0 -0
  163. data/public/assets/botones/boton.jpg +0 -0
  164. data/public/assets/botones/boton.png +0 -0
  165. data/public/assets/botones/boton1.png +0 -0
  166. data/public/assets/botones/boton2.png +0 -0
  167. data/public/assets/botones/boton_classic.png +0 -0
  168. data/public/assets/botones/boton_classic1.png +0 -0
  169. data/public/assets/botones/boton_classic2.png +0 -0
  170. data/public/assets/botones/bullet.png +0 -0
  171. data/public/assets/botones/bullet1.png +0 -0
  172. data/public/assets/botones/bullet_V_dis.png +0 -0
  173. data/public/assets/botones/bullet_dis.png +0 -0
  174. data/public/assets/botones/bullet_v.png +0 -0
  175. data/public/assets/botones/bullet_v1.png +0 -0
  176. data/public/assets/botones/chekOff.png +0 -0
  177. data/public/assets/botones/chekOff1.png +0 -0
  178. data/public/assets/botones/chekOff2.png +0 -0
  179. data/public/assets/botones/chekOn.png +0 -0
  180. data/public/assets/botones/chekOn1.png +0 -0
  181. data/public/assets/botones/chekOn2.png +0 -0
  182. data/public/assets/botones/chek_dis.png +0 -0
  183. data/public/assets/botones/close.png +0 -0
  184. data/public/assets/botones/close1.png +0 -0
  185. data/public/assets/botones/close2.png +0 -0
  186. data/public/assets/botones/close_folder.png +0 -0
  187. data/public/assets/botones/colorPicker.png +0 -0
  188. data/public/assets/botones/colorPicker1.png +0 -0
  189. data/public/assets/botones/colorPicker2.png +0 -0
  190. data/public/assets/botones/colorPicker_blanco.png +0 -0
  191. data/public/assets/botones/colorPicker_blanco1.png +0 -0
  192. data/public/assets/botones/colorPicker_blanco2.png +0 -0
  193. data/public/assets/botones/colorPicker_dis.png +0 -0
  194. data/public/assets/botones/combo.png +0 -0
  195. data/public/assets/botones/combo1.png +0 -0
  196. data/public/assets/botones/combo2.png +0 -0
  197. data/public/assets/botones/combo_dis.png +0 -0
  198. data/public/assets/botones/dataIcon.png +0 -0
  199. data/public/assets/botones/dataIcon1.png +0 -0
  200. data/public/assets/botones/dataIcon2.png +0 -0
  201. data/public/assets/botones/dataIcon_dis.png +0 -0
  202. data/public/assets/botones/dataText.png +0 -0
  203. data/public/assets/botones/folder_close.png +0 -0
  204. data/public/assets/botones/folder_open.png +0 -0
  205. data/public/assets/botones/hoja.png +0 -0
  206. data/public/assets/botones/icon_down.png +0 -0
  207. data/public/assets/botones/icon_up.png +0 -0
  208. data/public/assets/botones/last_toggle.png +0 -0
  209. data/public/assets/botones/last_toggle1.png +0 -0
  210. data/public/assets/botones/last_toggle2.png +0 -0
  211. data/public/assets/botones/last_toggle3.png +0 -0
  212. data/public/assets/botones/numericStepper_Down.png +0 -0
  213. data/public/assets/botones/numericStepper_Down1.png +0 -0
  214. data/public/assets/botones/numericStepper_Down2.png +0 -0
  215. data/public/assets/botones/numericStepper_Down_dis.png +0 -0
  216. data/public/assets/botones/numericStepper_Text.png +0 -0
  217. data/public/assets/botones/numericStepper_Up.png +0 -0
  218. data/public/assets/botones/numericStepper_Up1.png +0 -0
  219. data/public/assets/botones/numericStepper_Up2.png +0 -0
  220. data/public/assets/botones/numericStepper_Up_dis.png +0 -0
  221. data/public/assets/botones/open_folder.png +0 -0
  222. data/public/assets/botones/prev_toggle.png +0 -0
  223. data/public/assets/botones/prev_toggle1.png +0 -0
  224. data/public/assets/botones/prev_toggle2.png +0 -0
  225. data/public/assets/botones/prev_toggle3.png +0 -0
  226. data/public/assets/botones/progress.png +0 -0
  227. data/public/assets/botones/progress_barra.png +0 -0
  228. data/public/assets/botones/progress_charning.png +0 -0
  229. data/public/assets/botones/progress_dis.png +0 -0
  230. data/public/assets/botones/radio.png +0 -0
  231. data/public/assets/botones/radio1.png +0 -0
  232. data/public/assets/botones/radio2.png +0 -0
  233. data/public/assets/botones/radio3.png +0 -0
  234. data/public/assets/botones/radio4.png +0 -0
  235. data/public/assets/botones/radio_dis.png +0 -0
  236. data/public/assets/botones/seleccionData.png +0 -0
  237. data/public/assets/botones/seleccionDataSelected.png +0 -0
  238. data/public/assets/botones/seleccionDataUp.png +0 -0
  239. data/public/assets/botones/textArea.png +0 -0
  240. data/public/assets/botones/textInput.png +0 -0
  241. data/public/assets/botones/textInput_error.png +0 -0
  242. data/public/assets/botones/textInput_no.png +0 -0
  243. data/public/assets/botones/toggle_medio.png +0 -0
  244. data/public/assets/botones/toggle_medio1.png +0 -0
  245. data/public/assets/botones/toggle_medio2.png +0 -0
  246. data/public/assets/botones/toggle_medio3.png +0 -0
  247. data/public/assets/botones/toolTip.png +0 -0
  248. data/public/assets/general/Fondo4.jpg +0 -0
  249. data/public/assets/general/Fondo5.jpg +0 -0
  250. data/public/assets/general/MenuItem.png +0 -0
  251. data/public/assets/general/MenuItem1.png +0 -0
  252. data/public/assets/general/Thumbs.db +0 -0
  253. data/public/assets/general/alert_fondo.png +0 -0
  254. data/public/assets/general/alert_fondo1.png +0 -0
  255. data/public/assets/general/alert_titulo.png +0 -0
  256. data/public/assets/general/alert_titulo1.png +0 -0
  257. data/public/assets/general/blanc.png +0 -0
  258. data/public/assets/general/fondo.jpg +0 -0
  259. data/public/assets/general/fondo1.jpg +0 -0
  260. data/public/assets/general/fondo2.jpg +0 -0
  261. data/public/assets/general/fondo3.jpg +0 -0
  262. data/public/assets/general/fondo_list.png +0 -0
  263. data/public/assets/general/menu.png +0 -0
  264. data/public/assets/general/panel.png +0 -0
  265. data/public/assets/general/separator.png +0 -0
  266. data/public/assets/general/titleWindow.png +0 -0
  267. data/public/assets/general/titleWindow1.png +0 -0
  268. data/public/assets/icons/Thumbs.db +0 -0
  269. data/public/assets/icons/ai.jpg +0 -0
  270. data/public/assets/icons/air.jpg +0 -0
  271. data/public/assets/icons/fl.jpg +0 -0
  272. data/public/assets/icons/fw.jpg +0 -0
  273. data/public/assets/icons/fx.jpg +0 -0
  274. data/public/assets/icons/ps.jpg +0 -0
  275. data/public/assets/scroll/Thumbs.db +0 -0
  276. data/public/assets/scroll/barra.png +0 -0
  277. data/public/assets/scroll/barra1.png +0 -0
  278. data/public/assets/scroll/barra2.png +0 -0
  279. data/public/assets/scroll/barra_1.png +0 -0
  280. data/public/assets/scroll/barra_2.png +0 -0
  281. data/public/assets/scroll/down.png +0 -0
  282. data/public/assets/scroll/down1.png +0 -0
  283. data/public/assets/scroll/down_1.png +0 -0
  284. data/public/assets/scroll/down_2.png +0 -0
  285. data/public/assets/scroll/fondo.png +0 -0
  286. data/public/assets/scroll/fondo_1.png +0 -0
  287. data/public/assets/scroll/fondo_2.png +0 -0
  288. data/public/assets/scroll/up.png +0 -0
  289. data/public/assets/scroll/up1.png +0 -0
  290. data/public/assets/scroll/up_1.png +0 -0
  291. data/public/assets/scroll/up_2.png +0 -0
  292. data/public/assets/xml/listData.xml +21 -0
  293. data/public/dispatch.cgi +10 -0
  294. data/public/dispatch.fcgi +24 -0
  295. data/public/dispatch.rb +10 -0
  296. data/public/favicon.ico +0 -0
  297. data/public/framework_3.0.0.477.swf +0 -0
  298. data/public/framework_3.0.0.477.swz +0 -0
  299. data/public/history/history.css +6 -0
  300. data/public/history/history.js +662 -0
  301. data/public/history/historyFrame.html +29 -0
  302. data/public/images/avatar.png +0 -0
  303. data/public/images/logo.png +0 -0
  304. data/public/images/rails.png +0 -0
  305. data/public/images/spinner.gif +0 -0
  306. data/public/index.html +1 -0
  307. data/public/javascripts/application.js +2 -0
  308. data/public/javascripts/controls.js +963 -0
  309. data/public/javascripts/dragdrop.js +973 -0
  310. data/public/javascripts/effects.js +1128 -0
  311. data/public/javascripts/jquery-1.3.min.js +19 -0
  312. data/public/javascripts/jquery.localscroll.js +104 -0
  313. data/public/javascripts/jquery.scrollTo.js +150 -0
  314. data/public/javascripts/prototype.js +4320 -0
  315. data/public/playerProductInstall.swf +0 -0
  316. data/public/robots.txt +5 -0
  317. data/public/stylesheets/base.css +336 -0
  318. data/public/stylesheets/darkroom.css +1374 -0
  319. data/public/stylesheets/darkroom.swf +0 -0
  320. data/public/stylesheets/default.css +1034 -0
  321. data/public/stylesheets/myriad.swf +0 -0
  322. data/public/stylesheets/scaffold.css +54 -0
  323. data/public/stylesheets/themes/bec/style.css +301 -0
  324. data/public/stylesheets/themes/bec-green/style.css +290 -0
  325. data/public/stylesheets/themes/blue/style.css +280 -0
  326. data/public/stylesheets/themes/default/style.css +267 -0
  327. data/public/stylesheets/themes/djime-cerulean/style.css +298 -0
  328. data/public/stylesheets/themes/kathleene/style.css +272 -0
  329. data/public/stylesheets/themes/openbill/style.css +272 -0
  330. data/public/stylesheets/themes/orange/style.css +263 -0
  331. data/public/stylesheets/themes/reidb-greenish/style.css +301 -0
  332. data/rdoc/empty +0 -0
  333. data/rdoc/logo.max +0 -0
  334. data/rdoc/logo.png +0 -0
  335. data/script/about +4 -0
  336. data/script/console +3 -0
  337. data/script/dbconsole +3 -0
  338. data/script/destroy +3 -0
  339. data/script/generate +3 -0
  340. data/script/performance/benchmarker +3 -0
  341. data/script/performance/profiler +3 -0
  342. data/script/performance/request +3 -0
  343. data/script/plugin +3 -0
  344. data/script/process/inspector +3 -0
  345. data/script/process/reaper +3 -0
  346. data/script/process/spawner +3 -0
  347. data/script/runner +3 -0
  348. data/script/server +3 -0
  349. data/src/admin.mxml +62 -0
  350. data/src/assets/LoadingUndefinedSkin.swf +0 -0
  351. data/src/assets/UndefinedPersonalSkinLoad.swf +0 -0
  352. data/src/assets/blanc.png +0 -0
  353. data/src/assets/botones/Boton_dis.png +0 -0
  354. data/src/assets/botones/PopUpButton.png +0 -0
  355. data/src/assets/botones/PopUpButton1.png +0 -0
  356. data/src/assets/botones/PopUpButton2.png +0 -0
  357. data/src/assets/botones/PopUpButton_0.png +0 -0
  358. data/src/assets/botones/PopUpButton_1.png +0 -0
  359. data/src/assets/botones/PopUpButton_2.png +0 -0
  360. data/src/assets/botones/PopUpButton_dis.png +0 -0
  361. data/src/assets/botones/PopUpMenuButton.png +0 -0
  362. data/src/assets/botones/PopUpMenuButton1.png +0 -0
  363. data/src/assets/botones/PopUpMenuButton2.png +0 -0
  364. data/src/assets/botones/PopUpMenuButton_0.png +0 -0
  365. data/src/assets/botones/PopUpMenuButton_1.png +0 -0
  366. data/src/assets/botones/PopUpMenuButton_2.png +0 -0
  367. data/src/assets/botones/PopUpMenuButton_dis.png +0 -0
  368. data/src/assets/botones/Scroll_barra.png +0 -0
  369. data/src/assets/botones/Scroll_barra1.png +0 -0
  370. data/src/assets/botones/Scroll_barra2.png +0 -0
  371. data/src/assets/botones/Scroll_down.png +0 -0
  372. data/src/assets/botones/Scroll_down1.png +0 -0
  373. data/src/assets/botones/Scroll_fondo.png +0 -0
  374. data/src/assets/botones/Scroll_icon.png +0 -0
  375. data/src/assets/botones/Scroll_up.png +0 -0
  376. data/src/assets/botones/Scroll_up1.png +0 -0
  377. data/src/assets/botones/TabNavigator.png +0 -0
  378. data/src/assets/botones/TabNavigator1.png +0 -0
  379. data/src/assets/botones/TabNavigator2.png +0 -0
  380. data/src/assets/botones/TabNavigator3.png +0 -0
  381. data/src/assets/botones/Thumbs.db +0 -0
  382. data/src/assets/botones/accordion_backround.png +0 -0
  383. data/src/assets/botones/accordion_barra.png +0 -0
  384. data/src/assets/botones/accordion_barra1.png +0 -0
  385. data/src/assets/botones/accordion_barra2.png +0 -0
  386. data/src/assets/botones/accordion_barra3.png +0 -0
  387. data/src/assets/botones/adelante.png +0 -0
  388. data/src/assets/botones/adelante1.png +0 -0
  389. data/src/assets/botones/adelante2.png +0 -0
  390. data/src/assets/botones/adelante_dis.png +0 -0
  391. data/src/assets/botones/atras.png +0 -0
  392. data/src/assets/botones/atras1.png +0 -0
  393. data/src/assets/botones/atras2.png +0 -0
  394. data/src/assets/botones/atras_dis.png +0 -0
  395. data/src/assets/botones/barra.png +0 -0
  396. data/src/assets/botones/barra_dis.png +0 -0
  397. data/src/assets/botones/barra_v.png +0 -0
  398. data/src/assets/botones/boton.jpg +0 -0
  399. data/src/assets/botones/boton.png +0 -0
  400. data/src/assets/botones/boton1.png +0 -0
  401. data/src/assets/botones/boton2.png +0 -0
  402. data/src/assets/botones/boton_classic.png +0 -0
  403. data/src/assets/botones/boton_classic1.png +0 -0
  404. data/src/assets/botones/boton_classic2.png +0 -0
  405. data/src/assets/botones/bullet.png +0 -0
  406. data/src/assets/botones/bullet1.png +0 -0
  407. data/src/assets/botones/bullet_V_dis.png +0 -0
  408. data/src/assets/botones/bullet_dis.png +0 -0
  409. data/src/assets/botones/bullet_v.png +0 -0
  410. data/src/assets/botones/bullet_v1.png +0 -0
  411. data/src/assets/botones/chekOff.png +0 -0
  412. data/src/assets/botones/chekOff1.png +0 -0
  413. data/src/assets/botones/chekOff2.png +0 -0
  414. data/src/assets/botones/chekOn.png +0 -0
  415. data/src/assets/botones/chekOn1.png +0 -0
  416. data/src/assets/botones/chekOn2.png +0 -0
  417. data/src/assets/botones/chek_dis.png +0 -0
  418. data/src/assets/botones/close.png +0 -0
  419. data/src/assets/botones/close1.png +0 -0
  420. data/src/assets/botones/close2.png +0 -0
  421. data/src/assets/botones/close_folder.png +0 -0
  422. data/src/assets/botones/colorPicker.png +0 -0
  423. data/src/assets/botones/colorPicker1.png +0 -0
  424. data/src/assets/botones/colorPicker2.png +0 -0
  425. data/src/assets/botones/colorPicker_blanco.png +0 -0
  426. data/src/assets/botones/colorPicker_blanco1.png +0 -0
  427. data/src/assets/botones/colorPicker_blanco2.png +0 -0
  428. data/src/assets/botones/colorPicker_dis.png +0 -0
  429. data/src/assets/botones/combo.png +0 -0
  430. data/src/assets/botones/combo1.png +0 -0
  431. data/src/assets/botones/combo2.png +0 -0
  432. data/src/assets/botones/combo_dis.png +0 -0
  433. data/src/assets/botones/dataIcon.png +0 -0
  434. data/src/assets/botones/dataIcon1.png +0 -0
  435. data/src/assets/botones/dataIcon2.png +0 -0
  436. data/src/assets/botones/dataIcon_dis.png +0 -0
  437. data/src/assets/botones/dataText.png +0 -0
  438. data/src/assets/botones/folder_close.png +0 -0
  439. data/src/assets/botones/folder_open.png +0 -0
  440. data/src/assets/botones/hoja.png +0 -0
  441. data/src/assets/botones/icon_down.png +0 -0
  442. data/src/assets/botones/icon_up.png +0 -0
  443. data/src/assets/botones/last_toggle.png +0 -0
  444. data/src/assets/botones/last_toggle1.png +0 -0
  445. data/src/assets/botones/last_toggle2.png +0 -0
  446. data/src/assets/botones/last_toggle3.png +0 -0
  447. data/src/assets/botones/numericStepper_Down.png +0 -0
  448. data/src/assets/botones/numericStepper_Down1.png +0 -0
  449. data/src/assets/botones/numericStepper_Down2.png +0 -0
  450. data/src/assets/botones/numericStepper_Down_dis.png +0 -0
  451. data/src/assets/botones/numericStepper_Text.png +0 -0
  452. data/src/assets/botones/numericStepper_Up.png +0 -0
  453. data/src/assets/botones/numericStepper_Up1.png +0 -0
  454. data/src/assets/botones/numericStepper_Up2.png +0 -0
  455. data/src/assets/botones/numericStepper_Up_dis.png +0 -0
  456. data/src/assets/botones/open_folder.png +0 -0
  457. data/src/assets/botones/prev_toggle.png +0 -0
  458. data/src/assets/botones/prev_toggle1.png +0 -0
  459. data/src/assets/botones/prev_toggle2.png +0 -0
  460. data/src/assets/botones/prev_toggle3.png +0 -0
  461. data/src/assets/botones/progress.png +0 -0
  462. data/src/assets/botones/progress_barra.png +0 -0
  463. data/src/assets/botones/progress_charning.png +0 -0
  464. data/src/assets/botones/progress_dis.png +0 -0
  465. data/src/assets/botones/radio.png +0 -0
  466. data/src/assets/botones/radio1.png +0 -0
  467. data/src/assets/botones/radio2.png +0 -0
  468. data/src/assets/botones/radio3.png +0 -0
  469. data/src/assets/botones/radio4.png +0 -0
  470. data/src/assets/botones/radio_dis.png +0 -0
  471. data/src/assets/botones/seleccionData.png +0 -0
  472. data/src/assets/botones/seleccionDataSelected.png +0 -0
  473. data/src/assets/botones/seleccionDataUp.png +0 -0
  474. data/src/assets/botones/textArea.png +0 -0
  475. data/src/assets/botones/textInput.png +0 -0
  476. data/src/assets/botones/textInput_error.png +0 -0
  477. data/src/assets/botones/textInput_no.png +0 -0
  478. data/src/assets/botones/toggle_medio.png +0 -0
  479. data/src/assets/botones/toggle_medio1.png +0 -0
  480. data/src/assets/botones/toggle_medio2.png +0 -0
  481. data/src/assets/botones/toggle_medio3.png +0 -0
  482. data/src/assets/botones/toolTip.png +0 -0
  483. data/src/assets/general/Fondo4.jpg +0 -0
  484. data/src/assets/general/Fondo5.jpg +0 -0
  485. data/src/assets/general/MenuItem.png +0 -0
  486. data/src/assets/general/MenuItem1.png +0 -0
  487. data/src/assets/general/Thumbs.db +0 -0
  488. data/src/assets/general/alert_fondo.png +0 -0
  489. data/src/assets/general/alert_fondo1.png +0 -0
  490. data/src/assets/general/alert_titulo.png +0 -0
  491. data/src/assets/general/alert_titulo1.png +0 -0
  492. data/src/assets/general/blanc.png +0 -0
  493. data/src/assets/general/fondo.jpg +0 -0
  494. data/src/assets/general/fondo1.jpg +0 -0
  495. data/src/assets/general/fondo2.jpg +0 -0
  496. data/src/assets/general/fondo3.jpg +0 -0
  497. data/src/assets/general/fondo_list.png +0 -0
  498. data/src/assets/general/menu.png +0 -0
  499. data/src/assets/general/panel.png +0 -0
  500. data/src/assets/general/separator.png +0 -0
  501. data/src/assets/general/titleWindow.png +0 -0
  502. data/src/assets/general/titleWindow1.png +0 -0
  503. data/src/assets/icons/Thumbs.db +0 -0
  504. data/src/assets/icons/ai.jpg +0 -0
  505. data/src/assets/icons/air.jpg +0 -0
  506. data/src/assets/icons/fl.jpg +0 -0
  507. data/src/assets/icons/fw.jpg +0 -0
  508. data/src/assets/icons/fx.jpg +0 -0
  509. data/src/assets/icons/ps.jpg +0 -0
  510. data/src/assets/programmatic/BigThumbClass.as +14 -0
  511. data/src/assets/programmatic/CustomPreloader.as +79 -0
  512. data/src/assets/programmatic/MyDateField.as +22 -0
  513. data/src/assets/scroll/Thumbs.db +0 -0
  514. data/src/assets/scroll/barra.png +0 -0
  515. data/src/assets/scroll/barra1.png +0 -0
  516. data/src/assets/scroll/barra2.png +0 -0
  517. data/src/assets/scroll/barra_1.png +0 -0
  518. data/src/assets/scroll/barra_2.png +0 -0
  519. data/src/assets/scroll/down.png +0 -0
  520. data/src/assets/scroll/down1.png +0 -0
  521. data/src/assets/scroll/down_1.png +0 -0
  522. data/src/assets/scroll/down_2.png +0 -0
  523. data/src/assets/scroll/fondo.png +0 -0
  524. data/src/assets/scroll/fondo_1.png +0 -0
  525. data/src/assets/scroll/fondo_2.png +0 -0
  526. data/src/assets/scroll/up.png +0 -0
  527. data/src/assets/scroll/up1.png +0 -0
  528. data/src/assets/scroll/up_1.png +0 -0
  529. data/src/assets/scroll/up_2.png +0 -0
  530. data/src/assets/xml/listData.xml +21 -0
  531. data/src/images/logo.png +0 -0
  532. data/src/libs/Cairngorm.swc +0 -0
  533. data/src/libs/flexlib.swc +0 -0
  534. data/src/org/rsos/openbill/business/RailsDelegate.as +109 -0
  535. data/src/org/rsos/openbill/business/Services.mxml +15 -0
  536. data/src/org/rsos/openbill/command/FpCommand.as +44 -0
  537. data/src/org/rsos/openbill/command/LoginCommand.as +52 -0
  538. data/src/org/rsos/openbill/command/LogoutCommand.as +43 -0
  539. data/src/org/rsos/openbill/command/ProductCommand.as +49 -0
  540. data/src/org/rsos/openbill/command/SettingCommand.as +39 -0
  541. data/src/org/rsos/openbill/control/OpenbillController.as +25 -0
  542. data/src/org/rsos/openbill/event/FpEvent.as +29 -0
  543. data/src/org/rsos/openbill/event/LoginEvent.as +29 -0
  544. data/src/org/rsos/openbill/event/LogoutEvent.as +26 -0
  545. data/src/org/rsos/openbill/event/ProductEvent.as +29 -0
  546. data/src/org/rsos/openbill/event/SettingEvent.as +29 -0
  547. data/src/org/rsos/openbill/model/OpenbillModelLocator.as +188 -0
  548. data/src/org/rsos/openbill/util/ValueObjectUtil.as +19 -0
  549. data/src/org/rsos/openbill/view/Content.mxml +4 -0
  550. data/src/org/rsos/openbill/view/Footer.mxml +25 -0
  551. data/src/org/rsos/openbill/view/Header.mxml +31 -0
  552. data/src/org/rsos/openbill/view/Product.mxml +82 -0
  553. data/src/org/rsos/openbill/view/Setting.mxml +111 -0
  554. data/src/org/rsos/openbill/view/SignIn.mxml +67 -0
  555. data/src/org/rsos/openbill/vo/AccountVO.as +13 -0
  556. data/src/org/rsos/openbill/vo/CurrencyVO.as +18 -0
  557. data/src/org/rsos/openbill/vo/ProductVO.as +17 -0
  558. data/src/org/rsos/openbill/vo/RoleVO.as +14 -0
  559. data/src/org/rsos/openbill/vo/SettingVO.as +29 -0
  560. data/src/org/rsos/openbill/vo/UserVO.as +18 -0
  561. data/src/stylesheets/darkroom.css +1374 -0
  562. data/src/stylesheets/darkroom.swf +0 -0
  563. data/src/stylesheets/default.css +1034 -0
  564. data/src/stylesheets/myriad.swf +0 -0
  565. data/test/fixtures/accounts.yml +3 -0
  566. data/test/fixtures/billingcycles.yml +41 -0
  567. data/test/fixtures/currencies.yml +11 -0
  568. data/test/fixtures/emailtemplates.yml +8 -0
  569. data/test/fixtures/invoicedetails.yml +0 -0
  570. data/test/fixtures/invoices.yml +0 -0
  571. data/test/fixtures/options.yml +0 -0
  572. data/test/fixtures/orderdetails.yml +0 -0
  573. data/test/fixtures/orders.yml +0 -0
  574. data/test/fixtures/paymentgateways.yml +0 -0
  575. data/test/fixtures/products.yml +40 -0
  576. data/test/fixtures/registrarlogs.yml +0 -0
  577. data/test/fixtures/registrars.yml +4 -0
  578. data/test/fixtures/roles.yml +19 -0
  579. data/test/fixtures/serverlogs.yml +0 -0
  580. data/test/fixtures/servers.yml +0 -0
  581. data/test/fixtures/settings.yml +7 -0
  582. data/test/fixtures/tlds.yml +17 -0
  583. data/test/fixtures/transactions.yml +0 -0
  584. data/test/fixtures/userfieldnames.yml +9 -0
  585. data/test/fixtures/userfieldvalues.yml +11 -0
  586. data/test/fixtures/users.yml +28 -0
  587. data/test/functional/products_controller_test.rb +8 -8
  588. data/test/functional/sessions_controller_test.rb +8 -8
  589. data/test/functional/settings_controller_test.rb +8 -8
  590. data/test/integration/empty +0 -0
  591. data/test/unit/user_mailer_test.rb +7 -7
  592. data/test/unit/user_test.rb +7 -7
  593. data/vendor/generators/cairngorm/USAGE +7 -0
  594. data/vendor/generators/cairngorm/cairngorm_generator.rb +23 -0
  595. data/vendor/generators/cairngorm/templates/Controller_template.as +20 -0
  596. data/vendor/generators/cairngorm/templates/ModelLocator_template.as +29 -0
  597. data/vendor/generators/cairngorm/templates/Services_template.mxml +8 -0
  598. data/vendor/generators/cairngorm/templates/ValueObjectUtil_template.as +19 -0
  599. data/vendor/generators/cairngorm/templates/main_template.mxml +27 -0
  600. data/vendor/generators/command/USAGE +10 -0
  601. data/vendor/generators/command/command_generator.rb +8 -0
  602. data/vendor/generators/command/templates/command_template.as +39 -0
  603. data/vendor/generators/command/templates/event_template.as +26 -0
  604. data/vendor/generators/delegate/USAGE +8 -0
  605. data/vendor/generators/delegate/delegate_generator.rb +7 -0
  606. data/vendor/generators/delegate/templates/delegate_template.as +26 -0
  607. data/vendor/generators/event/USAGE +8 -0
  608. data/vendor/generators/event/event_generator.rb +7 -0
  609. data/vendor/generators/event/templates/event_template.as +26 -0
  610. data/vendor/generators/vo/USAGE +9 -0
  611. data/vendor/generators/vo/templates/vo_template.as +18 -0
  612. data/vendor/generators/vo/vo_generator.rb +7 -0
  613. data/vendor/generators/worbservice/USAGE +8 -0
  614. data/vendor/generators/worbservice/templates/service.rb +11 -0
  615. data/vendor/generators/worbservice/worbservice_generator.rb +7 -0
  616. data/vendor/plugins/enum-column/init.rb +9 -0
  617. data/vendor/plugins/enum-column/lib/enum/active_record_helper.rb +107 -0
  618. data/vendor/plugins/enum-column/lib/enum/enum_adapter.rb +76 -0
  619. data/vendor/plugins/enum-column/lib/enum/mysql_adapter.rb +33 -0
  620. data/vendor/plugins/enum-column/lib/enum/postgresql_adapter.rb +64 -0
  621. data/vendor/plugins/enum-column/lib/enum/quoting.rb +17 -0
  622. data/vendor/plugins/enum-column/lib/enum/schema_definitions.rb +12 -0
  623. data/vendor/plugins/enum-column/lib/enum/schema_statements.rb +32 -0
  624. data/vendor/plugins/enum-column/lib/enum/sqlite3_adapter.rb +52 -0
  625. data/vendor/plugins/enum-column/lib/enum/validations.rb +40 -0
  626. data/vendor/plugins/enum-column/readme.html +125 -0
  627. data/vendor/plugins/enum-column/test/db/schema.rb +28 -0
  628. data/vendor/plugins/enum-column/test/enum_mysql_test.rb +220 -0
  629. data/vendor/plugins/enum-column/test/fixtures/db_definitions/mysql.drop.sql +32 -0
  630. data/vendor/plugins/enum-column/test/fixtures/db_definitions/mysql.sql +244 -0
  631. data/vendor/plugins/enum-column/test/fixtures/enumeration.rb +20 -0
  632. data/vendor/plugins/enum-column/test/test_helper.rb +18 -0
  633. data/vendor/plugins/restful-authentication/.gitignore +21 -0
  634. data/vendor/plugins/restful-authentication/CHANGELOG +68 -0
  635. data/vendor/plugins/restful-authentication/LICENSE +20 -0
  636. data/vendor/plugins/restful-authentication/README.textile +224 -0
  637. data/vendor/plugins/restful-authentication/Rakefile +32 -0
  638. data/vendor/plugins/restful-authentication/TODO +15 -0
  639. data/vendor/plugins/restful-authentication/generators/authenticated/USAGE +1 -0
  640. data/vendor/plugins/restful-authentication/generators/authenticated/authenticated_generator.rb +478 -0
  641. data/vendor/plugins/restful-authentication/generators/authenticated/lib/insert_routes.rb +54 -0
  642. data/vendor/plugins/restful-authentication/generators/authenticated/templates/_model_partial.html.erb +8 -0
  643. data/vendor/plugins/restful-authentication/generators/authenticated/templates/activation.erb +3 -0
  644. data/vendor/plugins/restful-authentication/generators/authenticated/templates/authenticated_system.rb +189 -0
  645. data/vendor/plugins/restful-authentication/generators/authenticated/templates/authenticated_test_helper.rb +22 -0
  646. data/vendor/plugins/restful-authentication/generators/authenticated/templates/controller.rb +43 -0
  647. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/accounts.feature +109 -0
  648. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/sessions.feature +134 -0
  649. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/step_definitions/ra_env.rb +9 -0
  650. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/step_definitions/ra_navigation_steps.rb +48 -0
  651. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/step_definitions/ra_resource_steps.rb +178 -0
  652. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/step_definitions/ra_response_steps.rb +169 -0
  653. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/step_definitions/rest_auth_features_helper.rb +81 -0
  654. data/vendor/plugins/restful-authentication/generators/authenticated/templates/features/step_definitions/user_steps.rb +131 -0
  655. data/vendor/plugins/restful-authentication/generators/authenticated/templates/helper.rb +2 -0
  656. data/vendor/plugins/restful-authentication/generators/authenticated/templates/login.html.erb +16 -0
  657. data/vendor/plugins/restful-authentication/generators/authenticated/templates/mailer.rb +25 -0
  658. data/vendor/plugins/restful-authentication/generators/authenticated/templates/migration.rb +26 -0
  659. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model.rb +83 -0
  660. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model_controller.rb +85 -0
  661. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model_helper.rb +93 -0
  662. data/vendor/plugins/restful-authentication/generators/authenticated/templates/model_helper_spec.rb +158 -0
  663. data/vendor/plugins/restful-authentication/generators/authenticated/templates/observer.rb +11 -0
  664. data/vendor/plugins/restful-authentication/generators/authenticated/templates/signup.html.erb +19 -0
  665. data/vendor/plugins/restful-authentication/generators/authenticated/templates/signup_notification.erb +8 -0
  666. data/vendor/plugins/restful-authentication/generators/authenticated/templates/site_keys.rb +38 -0
  667. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/access_control_spec.rb +90 -0
  668. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/authenticated_system_spec.rb +102 -0
  669. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/sessions_controller_spec.rb +139 -0
  670. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/controllers/users_controller_spec.rb +198 -0
  671. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/fixtures/users.yml +60 -0
  672. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/helpers/users_helper_spec.rb +141 -0
  673. data/vendor/plugins/restful-authentication/generators/authenticated/templates/spec/models/user_spec.rb +290 -0
  674. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/functional_test.rb +82 -0
  675. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/mailer_test.rb +31 -0
  676. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/model_functional_test.rb +93 -0
  677. data/vendor/plugins/restful-authentication/generators/authenticated/templates/test/unit_test.rb +164 -0
  678. data/vendor/plugins/restful-authentication/init.rb +1 -0
  679. data/vendor/plugins/restful-authentication/lib/authentication/by_cookie_token.rb +82 -0
  680. data/vendor/plugins/restful-authentication/lib/authentication/by_password.rb +64 -0
  681. data/vendor/plugins/restful-authentication/lib/authentication.rb +40 -0
  682. data/vendor/plugins/restful-authentication/lib/authorization/aasm_roles.rb +63 -0
  683. data/vendor/plugins/restful-authentication/lib/authorization/stateful_roles.rb +62 -0
  684. data/vendor/plugins/restful-authentication/lib/authorization.rb +14 -0
  685. data/vendor/plugins/restful-authentication/lib/trustification/email_validation.rb +20 -0
  686. data/vendor/plugins/restful-authentication/lib/trustification.rb +14 -0
  687. data/vendor/plugins/restful-authentication/notes/AccessControl.txt +2 -0
  688. data/vendor/plugins/restful-authentication/notes/Authentication.txt +5 -0
  689. data/vendor/plugins/restful-authentication/notes/Authorization.txt +154 -0
  690. data/vendor/plugins/restful-authentication/notes/RailsPlugins.txt +78 -0
  691. data/vendor/plugins/restful-authentication/notes/SecurityFramework.graffle +0 -0
  692. data/vendor/plugins/restful-authentication/notes/SecurityFramework.png +0 -0
  693. data/vendor/plugins/restful-authentication/notes/SecurityPatterns.txt +163 -0
  694. data/vendor/plugins/restful-authentication/notes/Tradeoffs.txt +126 -0
  695. data/vendor/plugins/restful-authentication/notes/Trustification.txt +49 -0
  696. data/vendor/plugins/restful-authentication/rails/init.rb +3 -0
  697. data/vendor/plugins/restful-authentication/restful-authentication.gemspec +33 -0
  698. data/vendor/plugins/restful-authentication/tasks/auth.rake +33 -0
  699. data/vendor/plugins/ruby-enom/README.markdown +37 -0
  700. data/vendor/plugins/ruby-enom/ruby-enom.rb +198 -0
  701. metadata +729 -8
@@ -0,0 +1,178 @@
1
+ # The flexible code for resource testing came out of code from Ben Mabey
2
+ # http://www.benmabey.com/2008/02/04/rspec-plain-text-stories-webrat-chunky-bacon/
3
+
4
+ #
5
+ # Construct resources
6
+ #
7
+
8
+ #
9
+ # Build a resource as described, store it as an @instance variable. Ex:
10
+ # "Given a user with login: 'mojojojo'"
11
+ # produces a User instance stored in @user with 'mojojojo' as its login
12
+ # attribute.
13
+ #
14
+ Given "a $resource instance with $attributes" do |resource, attributes|
15
+ klass, instance, attributes = parse_resource_args resource, attributes
16
+ instance = klass.new(attributes)
17
+ instance.save!
18
+ find_resource(resource, attributes).should_not be_nil
19
+ keep_instance! resource, instance
20
+ end
21
+
22
+ #
23
+ # Stuff attributes into a preexisting @resource
24
+ # "And the user has thac0: 3"
25
+ # takes the earlier-defined @user instance and sets its thac0 to '3'.
26
+ #
27
+ Given "the $resource has $attributes" do |resource, attributes|
28
+ klass, instance, attributes = parse_resource_args resource, attributes
29
+ attributes.each do |attr, val|
30
+ instance.send("#{attr}=", val)
31
+ end
32
+ instance.save!
33
+ find_resource(resource, attributes).should_not be_nil
34
+ keep_instance! resource, instance
35
+ end
36
+
37
+ #
38
+ # Destroy all for this resource
39
+ #
40
+ Given "no $resource with $attr: '$val' exists" do |resource, attr, val|
41
+ klass, instance = parse_resource_args resource
42
+ klass.destroy_all(attr.to_sym => val)
43
+ instance = find_resource resource, attr.to_sym => val
44
+ instance.should be_nil
45
+ keep_instance! resource, instance
46
+ end
47
+
48
+ #
49
+ # Then's for resources
50
+ #
51
+
52
+ # Resource like this DOES exist
53
+ Then /^a (\w+) with ([\w: \']+) should exist$/ do |resource, attributes|
54
+ instance = find_resource resource, attributes
55
+ instance.should_not be_nil
56
+ keep_instance! resource, instance
57
+ end
58
+ # Resource like this DOES NOT exist
59
+ Then /^no (\w+) with ([\w: \']+) should exist$/ do |resource, attributes|
60
+ instance = find_resource resource, attributes
61
+ instance.should be_nil
62
+ end
63
+
64
+ # Resource has attributes with given values
65
+ Then "the $resource should have $attributes" do |resource, attributes|
66
+ klass, instance, attributes = parse_resource_args resource, attributes
67
+ attributes.each do |attr, val|
68
+ instance.send(attr).should == val
69
+ end
70
+ end
71
+
72
+ # Resource attributes should / should not be nil
73
+ Then "the $resource's $attr should be nil" do |resource, attr|
74
+ klass, instance = parse_resource_args resource
75
+ instance.send(attr).should be_nil
76
+ end
77
+ Then "the $resource's $attr should not be nil" do |resource, attr|
78
+ klass, instance = parse_resource_args resource
79
+ instance.send(attr).should_not be_nil
80
+ end
81
+
82
+ #
83
+ # Bank each of the @resource's listed attributes for later.
84
+ #
85
+ Given "we try hard to remember the $resource's $attributes" do |resource, attributes|
86
+ attributes = attributes.to_array_from_story
87
+ attributes.each do |attr|
88
+ memorize_resource_value resource, attr
89
+ end
90
+ end
91
+ #
92
+ # Bank each of the @resource's listed attributes for later.
93
+ #
94
+ Given "we don't remember anything about the past" do
95
+ memorize_forget_all!
96
+ end
97
+
98
+ #
99
+ # Compare @resource.attr to its earlier-memorized value.
100
+ # Specify ' using method_name' (abs, to_s, &c) to coerce before comparing.
101
+ # For important and mysterious reasons, timestamps want to_i or to_s.
102
+ #
103
+ Then /^the (\w+)\'s (\w+) should stay the same under (\w+)$/ do |resource, attr, func|
104
+ klass, instance = parse_resource_args resource
105
+ # Get the values
106
+ old_value = recall_resource_value(resource, attr)
107
+ new_value = instance.send(attr)
108
+ # Transform each value, maybe, using value.func
109
+ if func then new_value = new_value.send(func); old_value = old_value.send(func) end
110
+ # Compare
111
+ old_value.should eql(new_value)
112
+ end
113
+
114
+ #
115
+ # Look for each for the given attributes in the page's text
116
+ #
117
+ Then "page should have the $resource's $attributes" do |resource, attributes|
118
+ actual_resource = instantize(resource)
119
+ attributes.split(/, and |, /).each do |attribute|
120
+ response.should have_text(/#{actual_resource.send(attribute.strip.gsub(" ","_"))}/)
121
+ end
122
+ end
123
+
124
+ #
125
+ # Turn a resource name and a to_hash_from_story string like
126
+ # "attr: 'value', attr2: 'value2', ... , and attrN: 'valueN'"
127
+ # into
128
+ # * klass -- the class matching that Resource
129
+ # * instance -- the possibly-preexisting local instance value @resource
130
+ # * attributes -- a hash matching the given attribute-list string
131
+ #
132
+ def parse_resource_args resource, attributes=nil
133
+ instance = instantize resource
134
+ klass = resource.classify.constantize
135
+ attributes = attributes.to_hash_from_story if attributes
136
+ [klass, instance, attributes]
137
+ end
138
+
139
+ #
140
+ # Given a class name 'resource' and a hash of conditsion, find a model
141
+ #
142
+ def find_resource resource, conditions
143
+ klass, instance = parse_resource_args resource
144
+ conditions = conditions.to_hash_from_story unless (conditions.is_a? Hash)
145
+ klass.find(:first, :conditions => conditions)
146
+ end
147
+
148
+ #
149
+ # Simple, brittle, useful: store the given resource's attribute
150
+ # so we can compare it later.
151
+ #
152
+ def memorize_resource_value resource, attr
153
+ klass, instance = parse_resource_args resource
154
+ value = instance.send(attr)
155
+ @_memorized ||= {}
156
+ @_memorized[resource] ||= {}
157
+ @_memorized[resource][attr] = value
158
+ value
159
+ end
160
+ def recall_resource_value resource, attr
161
+ @_memorized[resource][attr]
162
+ end
163
+ def memorize_forget_all!
164
+ @_memorized = {}
165
+ end
166
+
167
+ #
168
+ # Keep the object around in a local instance variable @resource.
169
+ #
170
+ # So, for instance,
171
+ # klass, instance = parse_resource_args 'user'
172
+ # instance = klass.new({login => 'me', password => 'monkey', ...})
173
+ # keep_instance! resource, instance
174
+ # keeps the just-constructed User model in the @user instance variable.
175
+ #
176
+ def keep_instance! resource, object
177
+ instance_variable_set("@#{resource}", object)
178
+ end
@@ -0,0 +1,169 @@
1
+ #
2
+ # What you should see when you get there
3
+ #
4
+
5
+ #
6
+ # Destinations. Ex:
7
+ # She should be at the new kids page
8
+ # Tarkin should be at the destroy alderaan page
9
+ # The visitor should be at the '/lolcats/download' form
10
+ # The visitor should be redirected to '/hi/mom'
11
+ #
12
+ # It doesn't know anything about actual routes -- it just
13
+ # feeds its output to render_template or redirect_to
14
+ #
15
+ Then "$actor should be at $path" do |_, path|
16
+ response.should render_template(grok_path(path))
17
+ end
18
+
19
+ Then "$actor should be redirected to $path" do |_, path|
20
+ response.should redirect_to(grok_path(path))
21
+ end
22
+
23
+ Then "the page should look AWESOME" do
24
+ response.should have_tag('head>title')
25
+ response.should have_tag('h1')
26
+ # response.should be_valid_xhtml
27
+ end
28
+
29
+ #
30
+ # Tags
31
+ #
32
+
33
+ Then "the page should contain '$text'" do |_, text|
34
+ response.should have_text(/#{text}/)
35
+ end
36
+
37
+ # please note: this enforces the use of a <label> field
38
+ Then "$actor should see a <$container> containing a $attributes" do |_, container, attributes|
39
+ attributes = attributes.to_hash_from_story
40
+ response.should have_tag(container) do
41
+ attributes.each do |tag, label|
42
+ case tag
43
+ when "textfield" then with_tag "input[type='text']"; with_tag("label", label)
44
+ when "password" then with_tag "input[type='password']"; with_tag("label", label)
45
+ when "submit" then with_tag "input[type='submit'][value='#{label}']"
46
+ else with_tag tag, label
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ #
53
+ # Session, cookie variables
54
+ #
55
+ Then "$actor $token cookie should include $attrlist" do |_, token, attrlist|
56
+ attrlist = attrlist.to_array_from_story
57
+ cookies.include?(token).should be_true
58
+ attrlist.each do |val|
59
+ cookies[token].include?(val).should be_true
60
+ end
61
+ end
62
+
63
+ Then "$actor $token cookie should exist but not include $attrlist" do |_, token, attrlist|
64
+ attrlist = attrlist.to_array_from_story
65
+ cookies.include?(token).should be_true
66
+ puts [cookies, attrlist, token].to_yaml
67
+ attrlist.each do |val|
68
+ cookies[token].include?(val).should_not be_true
69
+ end
70
+ end
71
+
72
+ Then "$actor should have $an $token cookie" do |_, _, token|
73
+ cookies[token].should_not be_blank
74
+ end
75
+ Then "$actor should not have $an $token cookie" do |_, _, token|
76
+ cookies[token].should be_blank
77
+ end
78
+
79
+ Given "$actor has $an cookie jar with $attributes" do |_, _, attributes|
80
+ attributes = attributes.to_hash_from_story
81
+ attributes.each do |attr, val|
82
+ cookies[attr] = val
83
+ end
84
+ end
85
+ Given "$actor session store has no $attrlist" do |_, attrlist|
86
+ attrlist = attrlist.to_array_from_story
87
+ attrlist.each do |attr|
88
+ # Note that the comparison passes through 'to_s'
89
+ session[attr.to_sym] = nil
90
+ end
91
+ end
92
+
93
+ Then "$actor session store should have $attributes" do |_, attributes|
94
+ attributes = attributes.to_hash_from_story
95
+ attributes.each do |attr, val|
96
+ # Note that the comparison passes through 'to_s'
97
+ session[attr.to_sym].to_s.should eql(val)
98
+ end
99
+ end
100
+
101
+ Then "$actor session store should not have $attrlist" do |_, attrlist|
102
+ attrlist = attrlist.to_array_from_story
103
+ attrlist.each do |attr|
104
+ session[attr.to_sym].blank?.should be_true
105
+ end
106
+ end
107
+
108
+ #
109
+ # Flash messages
110
+ #
111
+
112
+ Then /^she should +see an? (\w+) message '([\w !\']+)'$/ do |notice, message|
113
+ response.should have_flash(notice, %r{#{message}})
114
+ end
115
+
116
+ Then "$actor should not see $an $notice message '$message'" do |_, _, notice, message|
117
+ response.should_not have_flash(notice, %r{#{message}})
118
+ end
119
+
120
+ Then "$actor should see no messages" do |_|
121
+ ['error', 'warning', 'notice'].each do |notice|
122
+ response.should_not have_flash(notice)
123
+ end
124
+ end
125
+
126
+ RE_POLITENESS = /(?:please|sorry|thank(?:s| you))/i
127
+ Then %r{we should be polite about it} do
128
+ response.should have_tag("div.error,div.notice", RE_POLITENESS)
129
+ end
130
+ Then %r{we should not even be polite about it} do
131
+ response.should_not have_tag("div.error,div.notice", RE_POLITENESS)
132
+ end
133
+
134
+ #
135
+ # Resource's attributes
136
+ #
137
+ # "Then page should have the $resource's $attributes" is in resource_steps
138
+
139
+ # helpful debug step
140
+ Then "we dump the response" do
141
+ dump_response
142
+ end
143
+
144
+
145
+ def have_flash notice, *args
146
+ have_tag("div.#{notice}", *args)
147
+ end
148
+
149
+ RE_PRETTY_RESOURCE = /the (index|show|new|create|edit|update|destroy) (\w+) (page|form)/i
150
+ RE_THE_FOO_PAGE = /the '?([^']*)'? (page|form)/i
151
+ RE_QUOTED_PATH = /^'([^']*)'$/i
152
+ def grok_path path
153
+ path.gsub(/\s+again$/,'') # strip trailing ' again'
154
+ case
155
+ when path == 'the home page' then dest = '/'
156
+ when path =~ RE_PRETTY_RESOURCE then dest = template_for $1, $2
157
+ when path =~ RE_THE_FOO_PAGE then dest = $1
158
+ when path =~ RE_QUOTED_PATH then dest = $1
159
+ else dest = path
160
+ end
161
+ dest
162
+ end
163
+
164
+ # turns 'new', 'road bikes' into 'road_bikes/new'
165
+ # note that it's "action resource"
166
+ def template_for(action, resource)
167
+ "#{resource.gsub(" ","_")}/#{action}"
168
+ end
169
+
@@ -0,0 +1,81 @@
1
+ # If you have a global stories helper, move this line there:
2
+ include AuthenticatedTestHelper
3
+
4
+ # Most of the below came out of code from Ben Mabey
5
+ # http://www.benmabey.com/2008/02/04/rspec-plain-text-stories-webrat-chunky-bacon/
6
+
7
+ # These allow exceptions to come through as opposed to being caught and having non-helpful responses returned.
8
+ ActionController::Base.class_eval do
9
+ def perform_action
10
+ perform_action_without_rescue
11
+ end
12
+ end
13
+ Dispatcher.class_eval do
14
+ def self.failsafe_response(output, status, exception = nil)
15
+ raise exception
16
+ end
17
+ end
18
+
19
+ #
20
+ # Sugar for turning a story's attribute list into list, array, etc.
21
+ #
22
+ module ToFooFromStory
23
+ def ToFooFromStory.fix_key key
24
+ key.downcase.gsub(/\s+/, '_')
25
+ end
26
+ def ToFooFromStory.fix_value value
27
+ return '' if !value
28
+ value.strip!
29
+ case
30
+ when value =~ /^'(.*)'$/ then value = $1
31
+ when value =~ /^"(.*)"$/ then value = $1
32
+ when value == 'nil!' then value = nil
33
+ when value == 'non-nil!' then value = be_nil
34
+ when value =~ /^#\{(.*)\}$/ then value = eval($1)
35
+ end
36
+ value
37
+ end
38
+ # Converts a key: value list found in the steps into a hash.
39
+ # Example:
40
+ # ISBN: '0967539854' and comment: 'I love this book' and Quality rating: '4'
41
+ # # => {"quality_rating"=>"4", "isbn"=>"0967539854", "comment"=>"I love this book"}
42
+ def to_hash_from_story
43
+ hsh = self.split(/,? and |, /).inject({}) do |hash_so_far, key_value|
44
+ key, value = key_value.split(":")
45
+ if !value then warn "Couldn't understand story '#{self}': only understood up to the part '#{hash_so_far.to_yaml}'" end
46
+ hash_so_far.merge(ToFooFromStory::fix_key(key) => ToFooFromStory::fix_value(value))
47
+ end
48
+ end
49
+ # Coverts an attribute list found in the steps into an array
50
+ # Example:
51
+ # login, email, updated_at, and gravatar
52
+ # # => ['login', 'email', 'updated_at', 'gravatar']
53
+ def to_array_from_story
54
+ self.split(/,? and |, /).map do |value|
55
+ ToFooFromStory::fix_value(value)
56
+ end
57
+ end
58
+ end
59
+ class String
60
+ include ToFooFromStory
61
+ end
62
+
63
+ def instantize(string)
64
+ instance_variable_get("@#{string}")
65
+ end
66
+
67
+ #
68
+ # Spew response onto screen -- painful but scrolling >> debugger
69
+ #
70
+ def dump_response
71
+ # note that @request and @template won't to_yaml and that @session includes @cgi
72
+ response_methods = response.instance_variables - ['@request', '@template', '@cgi']
73
+ request_methods = response.request.instance_variables - ['@session_options_with_string_keys', '@cgi', '@session']
74
+ response_methods.map!{|attr| attr.gsub(/^@/,'')}.sort!
75
+ request_methods.map!{ |attr| attr.gsub(/^@/,'')}.sort!
76
+ puts '', '*' * 75,
77
+ response.instance_values.slice(*response_methods).to_yaml,
78
+ "*" * 75, '',
79
+ response.request.instance_values.slice(*request_methods).to_yaml,
80
+ "*" * 75, ''
81
+ end
@@ -0,0 +1,131 @@
1
+ RE_User = %r{(?:(?:the )? *(\w+) *)}
2
+ RE_User_TYPE = %r{(?: *(\w+)? *)}
3
+
4
+ #
5
+ # Setting
6
+ #
7
+
8
+ Given "an anonymous user" do
9
+ log_out!
10
+ end
11
+
12
+ Given "$an $user_type user with $attributes" do |_, user_type, attributes|
13
+ create_user! user_type, attributes.to_hash_from_story
14
+ end
15
+
16
+ Given "$an $user_type user named '$login'" do |_, user_type, login|
17
+ create_user! user_type, named_user(login)
18
+ end
19
+
20
+ Given "$an $user_type user logged in as '$login'" do |_, user_type, login|
21
+ create_user! user_type, named_user(login)
22
+ log_in_user!
23
+ end
24
+
25
+ Given "$actor is logged in" do |_, login|
26
+ log_in_user! @user_params || named_user(login)
27
+ end
28
+
29
+ Given "there is no $user_type user named '$login'" do |_, login|
30
+ @user = User.find_by_login(login)
31
+ @user.destroy! if @user
32
+ @user.should be_nil
33
+ end
34
+
35
+ #
36
+ # Actions
37
+ #
38
+ When "$actor logs out" do
39
+ log_out
40
+ end
41
+
42
+ When "$actor registers an account as the preloaded '$login'" do |_, login|
43
+ user = named_user(login)
44
+ user['password_confirmation'] = user['password']
45
+ create_user user
46
+ end
47
+
48
+ When "$actor registers an account with $attributes" do |_, attributes|
49
+ create_user attributes.to_hash_from_story
50
+ end
51
+
52
+
53
+ When "$actor logs in with $attributes" do |_, attributes|
54
+ log_in_user attributes.to_hash_from_story
55
+ end
56
+
57
+ #
58
+ # Result
59
+ #
60
+ Then "$actor should be invited to sign in" do |_|
61
+ response.should render_template('/sessions/new')
62
+ end
63
+
64
+ Then "$actor should not be logged in" do |_|
65
+ controller.logged_in?.should_not be_true
66
+ end
67
+
68
+ Then "$login should be logged in" do |login|
69
+ controller.logged_in?.should be_true
70
+ controller.current_user.should === @user
71
+ controller.current_user.login.should == login
72
+ end
73
+
74
+ def named_user login
75
+ user_params = {
76
+ 'admin' => {'id' => 1, 'login' => 'addie', 'password' => '1234addie', 'email' => 'admin@example.com', },
77
+ 'oona' => { 'login' => 'oona', 'password' => '1234oona', 'email' => 'unactivated@example.com'},
78
+ 'reggie' => { 'login' => 'reggie', 'password' => 'monkey', 'email' => 'registered@example.com' },
79
+ }
80
+ user_params[login.downcase]
81
+ end
82
+
83
+ #
84
+ # User account actions.
85
+ #
86
+ # The ! methods are 'just get the job done'. It's true, they do some testing of
87
+ # their own -- thus un-DRY'ing tests that do and should live in the user account
88
+ # stories -- but the repetition is ultimately important so that a faulty test setup
89
+ # fails early.
90
+ #
91
+
92
+ def log_out
93
+ get '/sessions/destroy'
94
+ end
95
+
96
+ def log_out!
97
+ log_out
98
+ response.should redirect_to('/')
99
+ follow_redirect!
100
+ end
101
+
102
+ def create_user(user_params={})
103
+ @user_params ||= user_params
104
+ post "/users", :user => user_params
105
+ @user = User.find_by_login(user_params['login'])
106
+ end
107
+
108
+ def create_user!(user_type, user_params)
109
+ user_params['password_confirmation'] ||= user_params['password'] ||= user_params['password']
110
+ create_user user_params
111
+ response.should redirect_to('/')
112
+ follow_redirect!
113
+
114
+ end
115
+
116
+
117
+
118
+ def log_in_user user_params=nil
119
+ @user_params ||= user_params
120
+ user_params ||= @user_params
121
+ post "/session", user_params
122
+ @user = User.find_by_login(user_params['login'])
123
+ controller.current_user
124
+ end
125
+
126
+ def log_in_user! *args
127
+ log_in_user *args
128
+ response.should redirect_to('/')
129
+ follow_redirect!
130
+ response.should have_flash("notice", /Logged in successfully/)
131
+ end
@@ -0,0 +1,2 @@
1
+ module <%= controller_class_name %>Helper
2
+ end
@@ -0,0 +1,16 @@
1
+ <h1>Log In</h1>
2
+
3
+ <%% form_tag <%= controller_routing_name %>_path do -%>
4
+ <p><%%= label_tag 'login' %><br />
5
+ <%%= text_field_tag 'login', @login %></p>
6
+
7
+ <p><%%= label_tag 'password' %><br/>
8
+ <%%= password_field_tag 'password', nil %></p>
9
+
10
+ <!-- Uncomment this if you want this functionality
11
+ <p><%%= label_tag 'remember_me', 'Remember me' %>
12
+ <%%= check_box_tag 'remember_me', '1', @remember_me %></p>
13
+ -->
14
+
15
+ <p><%%= submit_tag 'Log in' %></p>
16
+ <%% end -%>
@@ -0,0 +1,25 @@
1
+ class <%= class_name %>Mailer < ActionMailer::Base
2
+ def signup_notification(<%= file_name %>)
3
+ setup_email(<%= file_name %>)
4
+ @subject += 'Please activate your new account'
5
+ <% if options[:include_activation] %>
6
+ @body[:url] = "http://YOURSITE/activate/#{<%= file_name %>.activation_code}"
7
+ <% else %>
8
+ @body[:url] = "http://YOURSITE/login/" <% end %>
9
+ end
10
+
11
+ def activation(<%= file_name %>)
12
+ setup_email(<%= file_name %>)
13
+ @subject += 'Your account has been activated!'
14
+ @body[:url] = "http://YOURSITE/"
15
+ end
16
+
17
+ protected
18
+ def setup_email(<%= file_name %>)
19
+ @recipients = "#{<%= file_name %>.email}"
20
+ @from = "ADMINEMAIL"
21
+ @subject = "[YOURSITE] "
22
+ @sent_on = Time.now
23
+ @body[:<%= file_name %>] = <%= file_name %>
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ class <%= migration_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table "<%= table_name %>", :force => true do |t|
4
+ t.column :login, :string, :limit => 40
5
+ t.column :name, :string, :limit => 100, :default => '', :null => true
6
+ t.column :email, :string, :limit => 100
7
+ t.column :crypted_password, :string, :limit => 40
8
+ t.column :salt, :string, :limit => 40
9
+ t.column :created_at, :datetime
10
+ t.column :updated_at, :datetime
11
+ t.column :remember_token, :string, :limit => 40
12
+ t.column :remember_token_expires_at, :datetime
13
+ <% if options[:include_activation] -%>
14
+ t.column :activation_code, :string, :limit => 40
15
+ t.column :activated_at, :datetime<% end %>
16
+ <% if options[:stateful] -%>
17
+ t.column :state, :string, :null => :no, :default => 'passive'
18
+ t.column :deleted_at, :datetime<% end %>
19
+ end
20
+ add_index :<%= table_name %>, :login, :unique => true
21
+ end
22
+
23
+ def self.down
24
+ drop_table "<%= table_name %>"
25
+ end
26
+ end