fat_free_crm 0.12.3 → 0.13.0

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.

Potentially problematic release.


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

Files changed (521) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +1 -11
  3. data/Gemfile +7 -19
  4. data/Gemfile.lock +166 -166
  5. data/Procfile +1 -1
  6. data/README.md +20 -20
  7. data/app/assets/javascripts/admin/fields.js.coffee +3 -3
  8. data/app/assets/javascripts/application.js.erb +3 -0
  9. data/app/assets/javascripts/crm.js +1 -0
  10. data/app/assets/javascripts/crm_comments.js.coffee +66 -0
  11. data/app/assets/javascripts/lists.js.coffee +45 -2
  12. data/app/assets/javascripts/search.js.coffee +2 -0
  13. data/app/assets/javascripts/timeago.js +17 -0
  14. data/app/assets/stylesheets/advanced_search.css.scss +49 -25
  15. data/app/assets/stylesheets/application.css.erb +3 -0
  16. data/app/assets/stylesheets/common.scss +13 -0
  17. data/app/assets/stylesheets/format_buttons.css.scss +15 -10
  18. data/app/assets/stylesheets/header.scss +3 -0
  19. data/app/assets/stylesheets/lists.css.scss +4 -0
  20. data/app/controllers/admin/fields_controller.rb +5 -5
  21. data/app/controllers/admin/users_controller.rb +1 -3
  22. data/app/controllers/application_controller.rb +23 -23
  23. data/app/controllers/comments_controller.rb +3 -31
  24. data/app/controllers/entities/accounts_controller.rb +3 -3
  25. data/app/controllers/entities/campaigns_controller.rb +4 -4
  26. data/app/controllers/entities/contacts_controller.rb +2 -2
  27. data/app/controllers/entities/leads_controller.rb +3 -3
  28. data/app/controllers/entities/opportunities_controller.rb +4 -3
  29. data/app/controllers/entities_controller.rb +6 -6
  30. data/app/controllers/home_controller.rb +1 -1
  31. data/app/controllers/lists_controller.rb +8 -1
  32. data/app/controllers/tasks_controller.rb +1 -1
  33. data/app/controllers/users_controller.rb +46 -23
  34. data/app/helpers/admin/application_helper.rb +1 -3
  35. data/app/helpers/admin/field_groups_helper.rb +2 -1
  36. data/app/helpers/application_helper.rb +37 -16
  37. data/app/helpers/home_helper.rb +1 -2
  38. data/app/helpers/leads_helper.rb +5 -6
  39. data/app/helpers/tasks_helper.rb +36 -50
  40. data/app/models/entities/account.rb +10 -7
  41. data/app/models/entities/campaign.rb +4 -4
  42. data/app/models/entities/contact.rb +8 -5
  43. data/app/models/entities/lead.rb +8 -8
  44. data/app/models/entities/opportunity.rb +13 -18
  45. data/app/models/fields/custom_field.rb +10 -0
  46. data/app/models/fields/field.rb +3 -3
  47. data/app/models/fields/field_group.rb +1 -1
  48. data/app/models/list.rb +1 -0
  49. data/app/models/polymorphic/address.rb +3 -3
  50. data/app/models/polymorphic/comment.rb +2 -4
  51. data/app/models/polymorphic/task.rb +32 -27
  52. data/app/models/setting.rb +3 -9
  53. data/app/models/users/ability.rb +2 -13
  54. data/app/models/users/user.rb +12 -15
  55. data/app/views/accounts/_edit.html.haml +1 -1
  56. data/app/views/accounts/_index_brief.html.haml +3 -3
  57. data/app/views/accounts/_index_long.html.haml +3 -3
  58. data/app/views/accounts/_new.html.haml +1 -1
  59. data/app/views/accounts/create.js.haml +17 -0
  60. data/app/views/accounts/destroy.js.haml +6 -0
  61. data/app/views/accounts/edit.js.haml +32 -0
  62. data/app/views/accounts/index.js.haml +11 -0
  63. data/app/views/accounts/index.xls.builder +9 -7
  64. data/app/views/accounts/new.js.haml +11 -0
  65. data/app/views/accounts/show.js.haml +5 -0
  66. data/app/views/accounts/update.js.haml +17 -0
  67. data/app/views/admin/field_groups/_edit.html.haml +1 -1
  68. data/app/views/admin/field_groups/_new.html.haml +1 -1
  69. data/app/views/admin/field_groups/confirm.js.haml +7 -0
  70. data/app/views/admin/field_groups/create.js.haml +20 -0
  71. data/app/views/admin/field_groups/destroy.js.haml +9 -0
  72. data/app/views/admin/field_groups/edit.js.haml +12 -0
  73. data/app/views/admin/field_groups/new.js.haml +8 -0
  74. data/app/views/admin/field_groups/update.js.haml +8 -0
  75. data/app/views/admin/fields/_field.html.haml +2 -2
  76. data/app/views/admin/fields/_form.html.haml +2 -2
  77. data/app/views/admin/fields/create.js.haml +17 -0
  78. data/app/views/admin/fields/destroy.js.haml +8 -0
  79. data/app/views/admin/fields/edit.js.haml +3 -0
  80. data/app/views/admin/fields/update.js.haml +13 -0
  81. data/app/views/admin/groups/_edit.html.haml +1 -1
  82. data/app/views/admin/groups/_new.html.haml +1 -1
  83. data/app/views/admin/groups/create.js.haml +10 -0
  84. data/app/views/admin/groups/destroy.js.haml +9 -0
  85. data/app/views/admin/groups/edit.js.haml +14 -0
  86. data/app/views/admin/groups/index.html.haml +1 -1
  87. data/app/views/admin/groups/index.js.haml +2 -0
  88. data/app/views/admin/groups/new.js.haml +9 -0
  89. data/app/views/admin/groups/update.js.haml +9 -0
  90. data/app/views/admin/tags/_edit.html.haml +1 -1
  91. data/app/views/admin/tags/_new.html.haml +1 -1
  92. data/app/views/admin/tags/confirm.js.haml +7 -0
  93. data/app/views/admin/tags/create.js.haml +11 -0
  94. data/app/views/admin/tags/destroy.js.haml +10 -0
  95. data/app/views/admin/tags/edit.js.haml +20 -0
  96. data/app/views/admin/tags/new.js.haml +7 -0
  97. data/app/views/admin/tags/update.js.haml +9 -0
  98. data/app/views/admin/users/_edit.html.haml +1 -1
  99. data/app/views/admin/users/_new.html.haml +1 -1
  100. data/app/views/admin/users/_user.html.haml +1 -1
  101. data/app/views/admin/users/confirm.js.haml +7 -0
  102. data/app/views/admin/users/create.js.haml +10 -0
  103. data/app/views/admin/users/destroy.js.haml +10 -0
  104. data/app/views/admin/users/edit.js.haml +20 -0
  105. data/app/views/admin/users/index.js.haml +2 -0
  106. data/app/views/admin/users/new.js.haml +9 -0
  107. data/app/views/admin/users/reactivate.js.haml +3 -0
  108. data/app/views/admin/users/suspend.js.haml +3 -0
  109. data/app/views/admin/users/update.js.haml +9 -0
  110. data/app/views/authentications/new.html.haml +1 -1
  111. data/app/views/campaigns/_edit.html.haml +1 -1
  112. data/app/views/campaigns/_new.html.haml +1 -1
  113. data/app/views/campaigns/create.js.haml +20 -0
  114. data/app/views/campaigns/destroy.js.haml +6 -0
  115. data/app/views/campaigns/edit.js.haml +33 -0
  116. data/app/views/campaigns/index.js.haml +11 -0
  117. data/app/views/campaigns/index.xls.builder +9 -7
  118. data/app/views/campaigns/new.js.haml +11 -0
  119. data/app/views/campaigns/show.js.haml +5 -0
  120. data/app/views/campaigns/update.js.haml +20 -0
  121. data/app/views/comments/_comment.html.haml +1 -1
  122. data/app/views/comments/_edit.html.haml +1 -1
  123. data/app/views/comments/_new.html.haml +3 -2
  124. data/app/views/comments/create.js.haml +14 -0
  125. data/app/views/comments/destroy.js.haml +5 -0
  126. data/app/views/comments/edit.js.haml +11 -0
  127. data/app/views/comments/update.js.haml +9 -0
  128. data/app/views/contacts/_edit.html.haml +1 -1
  129. data/app/views/contacts/_index_full.html.haml +1 -1
  130. data/app/views/contacts/_index_long.html.haml +2 -1
  131. data/app/views/contacts/_new.html.haml +1 -1
  132. data/app/views/contacts/_section_general.html.haml +3 -3
  133. data/app/views/contacts/create.js.haml +23 -0
  134. data/app/views/contacts/destroy.js.haml +9 -0
  135. data/app/views/contacts/edit.js.haml +35 -0
  136. data/app/views/contacts/index.js.haml +11 -0
  137. data/app/views/contacts/index.xls.builder +9 -7
  138. data/app/views/contacts/new.js.haml +13 -0
  139. data/app/views/contacts/show.js.haml +5 -0
  140. data/app/views/contacts/update.js.haml +22 -0
  141. data/app/views/emails/destroy.js.haml +5 -0
  142. data/app/views/entities/_permissions.html.haml +1 -1
  143. data/app/views/entities/attach.js.haml +21 -0
  144. data/app/views/entities/contacts.js.haml +3 -0
  145. data/app/views/entities/discard.js.haml +6 -0
  146. data/app/views/entities/leads.js.haml +3 -0
  147. data/app/views/entities/opportunities.js.haml +3 -0
  148. data/app/views/entities/subscription_update.js.haml +4 -0
  149. data/app/views/entities/versions.js.haml +3 -0
  150. data/app/views/fields/group.js.erb +3 -0
  151. data/app/views/home/_account.html.haml +3 -3
  152. data/app/views/home/_opportunity.html.haml +3 -3
  153. data/app/views/home/index.atom.builder +3 -3
  154. data/app/views/home/index.js.haml +7 -0
  155. data/app/views/home/index.rss.builder +2 -2
  156. data/app/views/home/options.js.haml +7 -0
  157. data/app/views/layouts/_footer.html.haml +0 -4
  158. data/app/views/layouts/_sidebar.html.haml +1 -0
  159. data/app/views/layouts/_tabbed.html.haml +1 -4
  160. data/app/views/layouts/admin/application.html.haml +0 -1
  161. data/app/views/layouts/application.html.haml +5 -7
  162. data/app/views/leads/_convert.html.haml +1 -1
  163. data/app/views/leads/_edit.html.haml +1 -1
  164. data/app/views/leads/_index_long.html.haml +2 -2
  165. data/app/views/leads/_new.html.haml +1 -1
  166. data/app/views/leads/convert.js.haml +35 -0
  167. data/app/views/leads/create.js.haml +21 -0
  168. data/app/views/leads/destroy.js.haml +9 -0
  169. data/app/views/leads/edit.js.haml +35 -0
  170. data/app/views/leads/index.js.haml +11 -0
  171. data/app/views/leads/index.xls.builder +9 -7
  172. data/app/views/leads/new.js.haml +11 -0
  173. data/app/views/leads/promote.js.haml +26 -0
  174. data/app/views/leads/reject.js.haml +12 -0
  175. data/app/views/leads/show.js.haml +5 -0
  176. data/app/views/leads/update.js.haml +26 -0
  177. data/app/views/lists/_personal_sidebar.html.haml +28 -0
  178. data/app/views/lists/_sidebar.html.haml +10 -7
  179. data/app/views/lists/create.js.haml +10 -0
  180. data/app/views/lists/destroy.js.haml +1 -0
  181. data/app/views/opportunities/_edit.html.haml +1 -1
  182. data/app/views/opportunities/_index_brief.html.haml +3 -3
  183. data/app/views/opportunities/_index_long.html.haml +3 -3
  184. data/app/views/opportunities/_new.html.haml +1 -2
  185. data/app/views/opportunities/_top_section.html.haml +4 -0
  186. data/app/views/opportunities/contacts.js.haml +3 -0
  187. data/app/views/opportunities/create.js.haml +29 -0
  188. data/app/views/opportunities/destroy.js.haml +13 -0
  189. data/app/views/opportunities/edit.js.haml +35 -0
  190. data/app/views/opportunities/index.js.haml +11 -0
  191. data/app/views/opportunities/index.xls.builder +9 -7
  192. data/app/views/opportunities/new.js.haml +13 -0
  193. data/app/views/opportunities/show.js.haml +5 -0
  194. data/app/views/opportunities/update.js.haml +25 -0
  195. data/app/views/passwords/edit.html.haml +1 -1
  196. data/app/views/passwords/new.html.haml +1 -1
  197. data/app/views/shared/_comment.html.haml +1 -1
  198. data/app/views/shared/_inline_styles.html.haml +1 -1
  199. data/app/views/tasks/_edit.html.haml +1 -1
  200. data/app/views/tasks/_new.html.haml +1 -1
  201. data/app/views/tasks/complete.js.haml +14 -0
  202. data/app/views/tasks/create.js.haml +39 -0
  203. data/app/views/tasks/destroy.js.haml +7 -0
  204. data/app/views/tasks/discard.js.haml +1 -0
  205. data/app/views/tasks/edit.js.haml +26 -0
  206. data/app/views/tasks/filter.js.haml +4 -0
  207. data/app/views/tasks/index.xls.builder +7 -5
  208. data/app/views/tasks/new.js.haml +8 -0
  209. data/app/views/tasks/update.js.haml +19 -0
  210. data/app/views/users/_password.html.haml +1 -1
  211. data/app/views/users/_profile.html.haml +1 -1
  212. data/app/views/users/avatar.js.haml +9 -0
  213. data/app/views/users/change_password.js.haml +13 -0
  214. data/app/views/users/edit.js.haml +9 -0
  215. data/app/views/users/new.html.haml +1 -1
  216. data/app/views/users/password.js.haml +10 -0
  217. data/app/views/users/update.js.haml +9 -0
  218. data/app/views/users/upload_avatar.js.haml +7 -0
  219. data/app/views/versions/_version.html.haml +1 -1
  220. data/config/application.rb +1 -4
  221. data/config/environments/production.rb +3 -2
  222. data/config/initializers/custom_field_ransack_translations.rb +15 -0
  223. data/config/initializers/locale.rb +9 -1
  224. data/config/initializers/secret_token.rb +1 -25
  225. data/config/initializers/views.rb +20 -20
  226. data/config/locales/cz.yml +245 -211
  227. data/config/locales/cz_fat_free_crm.yml +105 -181
  228. data/config/locales/de.yml +162 -118
  229. data/config/locales/de_fat_free_crm.yml +760 -731
  230. data/config/locales/de_ransack.yml +91 -0
  231. data/config/locales/en-GB.yml +158 -119
  232. data/config/locales/en-GB_fat_free_crm.yml +161 -279
  233. data/config/locales/en-US.yml +158 -121
  234. data/config/locales/en-US_fat_free_crm.yml +185 -179
  235. data/config/locales/en-US_ransack.yml +81 -82
  236. data/config/locales/es.yml +164 -123
  237. data/config/locales/es_fat_free_crm.yml +151 -209
  238. data/config/locales/fr-CA.yml +167 -130
  239. data/config/locales/fr-CA_fat_free_crm.yml +142 -202
  240. data/config/locales/fr.yml +170 -125
  241. data/config/locales/fr_fat_free_crm.yml +199 -302
  242. data/config/locales/it.yml +158 -122
  243. data/config/locales/it_fat_free_crm.yml +105 -168
  244. data/config/locales/ja.yml +162 -131
  245. data/config/locales/ja_fat_free_crm.yml +118 -188
  246. data/config/locales/pl.yml +168 -132
  247. data/config/locales/pl_fat_free_crm.yml +115 -186
  248. data/config/locales/pt-BR.yml +160 -127
  249. data/config/locales/pt-BR_fat_free_crm.yml +125 -182
  250. data/config/locales/ru.yml +256 -233
  251. data/config/locales/ru_fat_free_crm.yml +136 -193
  252. data/config/locales/sv-SE.yml +164 -181
  253. data/config/locales/sv-SE_fat_free_crm.yml +129 -193
  254. data/config/locales/th_fat_free_crm.yml +114 -194
  255. data/config/locales/zh-CN.yml +176 -149
  256. data/config/locales/zh-CN_fat_free_crm.yml +78 -167
  257. data/config/routes.rb +1 -1
  258. data/config/settings.default.yml +74 -23
  259. data/custom_plan.rb +11 -0
  260. data/db/migrate/20131207033244_add_user_id_to_lists.rb +6 -0
  261. data/db/schema.rb +4 -1
  262. data/fat_free_crm.gemspec +3 -3
  263. data/lib/fat_free_crm.rb +1 -11
  264. data/lib/fat_free_crm/export_csv.rb +3 -3
  265. data/lib/fat_free_crm/fields.rb +10 -0
  266. data/lib/fat_free_crm/gem_dependencies.rb +1 -2
  267. data/lib/fat_free_crm/i18n.rb +9 -5
  268. data/lib/fat_free_crm/version.rb +2 -2
  269. data/lib/fat_free_crm/view_factory.rb +8 -5
  270. data/lib/tasks/ffcrm/config.rake +9 -12
  271. data/lib/tasks/ffcrm/missing_translations.rake +2 -1
  272. data/spec/controllers/admin/users_controller_spec.rb +6 -4
  273. data/spec/controllers/applications_controller_spec.rb +4 -4
  274. data/spec/controllers/authentications_controller_spec.rb +15 -15
  275. data/spec/controllers/comments_controller_spec.rb +9 -87
  276. data/spec/controllers/emails_controller_spec.rb +1 -1
  277. data/spec/controllers/entities/accounts_controller_spec.rb +7 -7
  278. data/spec/controllers/entities/campaigns_controller_spec.rb +5 -5
  279. data/spec/controllers/entities/contacts_controller_spec.rb +7 -7
  280. data/spec/controllers/entities/leads_controller_spec.rb +14 -14
  281. data/spec/controllers/entities/opportunities_controller_spec.rb +8 -8
  282. data/spec/controllers/home_controller_spec.rb +6 -6
  283. data/spec/controllers/tasks_controller_spec.rb +7 -7
  284. data/spec/controllers/users_controller_spec.rb +22 -50
  285. data/spec/features/support/selector_helpers.rb +1 -6
  286. data/spec/features/tasks_spec.rb +2 -2
  287. data/spec/helpers/application_helper_spec.rb +15 -15
  288. data/spec/lib/fields_spec.rb +29 -29
  289. data/spec/lib/mail_processor/base_spec.rb +7 -7
  290. data/spec/lib/mail_processor/dropbox_spec.rb +3 -3
  291. data/spec/lib/view_factory_spec.rb +14 -14
  292. data/spec/models/entities/opportunity_spec.rb +1 -1
  293. data/spec/models/fields/custom_field_date_pair_spec.rb +14 -14
  294. data/spec/models/fields/custom_field_pair_spec.rb +13 -13
  295. data/spec/models/fields/custom_field_spec.rb +5 -5
  296. data/spec/models/fields/field_spec.rb +2 -2
  297. data/spec/models/observers/entity_observer_spec.rb +2 -2
  298. data/spec/models/users/user_spec.rb +7 -7
  299. data/spec/routing/comments_routing_spec.rb +0 -9
  300. data/spec/shared/controllers.rb +75 -77
  301. data/spec/shared/models.rb +1 -1
  302. data/spec/spec_helper.rb +1 -2
  303. data/spec/support/auth_macros.rb +3 -3
  304. data/spec/support/mail_processor_mocks.rb +13 -13
  305. data/spec/views/accounts/_edit.haml_spec.rb +1 -1
  306. data/spec/views/accounts/{create.rjs_spec.rb → create.js.haml_spec.rb} +9 -14
  307. data/spec/views/accounts/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -8
  308. data/spec/views/accounts/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +10 -18
  309. data/spec/views/accounts/{index.rjs_spec.rb → index.js.haml_spec.rb} +7 -11
  310. data/spec/views/accounts/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  311. data/spec/views/accounts/show.haml_spec.rb +1 -1
  312. data/spec/views/accounts/{update.rjs_spec.rb → update.js.haml_spec.rb} +16 -25
  313. data/spec/views/admin/field_groups/create.js.haml_spec.rb +31 -0
  314. data/spec/views/admin/field_groups/destroy.js.haml_spec.rb +31 -0
  315. data/spec/views/admin/field_groups/edit.js.haml_spec.rb +24 -0
  316. data/spec/views/admin/field_groups/new.js.haml_spec.rb +25 -0
  317. data/spec/views/admin/field_groups/update.js.haml_spec.rb +30 -0
  318. data/spec/views/admin/users/_create.haml_spec.rb +1 -1
  319. data/spec/views/admin/users/{create.rjs_spec.rb → create.js.haml_spec.rb} +6 -9
  320. data/spec/views/admin/users/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -7
  321. data/spec/views/admin/users/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +6 -12
  322. data/spec/views/admin/users/index.haml_spec.rb +0 -0
  323. data/spec/views/admin/users/{index.rjs_spec.rb → index.js.haml_spec.rb} +3 -5
  324. data/spec/views/admin/users/{new.rjs_spec.rb → new.js.haml_spec.rb} +4 -6
  325. data/spec/views/admin/users/{reactivate.rjs_spec.rb → reactivate.js.haml_spec.rb} +2 -4
  326. data/spec/views/admin/users/show.haml_spec.rb +0 -0
  327. data/spec/views/admin/users/{suspend.rjs_spec.rb → suspend.js.haml_spec.rb} +2 -4
  328. data/spec/views/admin/users/{update.rjs_spec.rb → update.js.haml_spec.rb} +6 -10
  329. data/spec/views/campaigns/{create.rjs_spec.rb → create.js.haml_spec.rb} +9 -14
  330. data/spec/views/campaigns/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -7
  331. data/spec/views/campaigns/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +11 -19
  332. data/spec/views/campaigns/{index.rjs_spec.rb → index.js.haml_spec.rb} +5 -9
  333. data/spec/views/campaigns/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  334. data/spec/views/campaigns/{update.rjs_spec.rb → update.js.haml_spec.rb} +14 -21
  335. data/spec/views/comments/{new.rjs_spec.rb → edit.js.haml_spec.rb} +12 -9
  336. data/spec/views/contacts/{create.rjs_spec.rb → create.js.haml_spec.rb} +9 -16
  337. data/spec/views/contacts/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -8
  338. data/spec/views/contacts/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +12 -19
  339. data/spec/views/contacts/index.haml_spec.rb +1 -1
  340. data/spec/views/contacts/{index.rjs_spec.rb → index.js.html_spec.rb} +7 -11
  341. data/spec/views/contacts/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -7
  342. data/spec/views/contacts/{update.rjs_spec.rb → update.js.haml_spec.rb} +20 -35
  343. data/spec/views/home/{index.rjs_spec.rb → index.js.haml_spec.rb} +2 -4
  344. data/spec/views/home/{options.rjs_spec.rb → options.js.haml_spec.rb} +7 -12
  345. data/spec/views/leads/{convert.rjs_spec.rb → convert.js.haml_spec.rb} +12 -20
  346. data/spec/views/leads/{create.rjs_spec.rb → create.js.haml_spec.rb} +13 -19
  347. data/spec/views/leads/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +9 -12
  348. data/spec/views/leads/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +12 -20
  349. data/spec/views/leads/{index.rjs_spec.rb → index.js.haml_spec.rb} +5 -9
  350. data/spec/views/leads/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  351. data/spec/views/leads/{promote.rjs_spec.rb → promote.js.haml_spec.rb} +28 -43
  352. data/spec/views/leads/{reject.rjs_spec.rb → reject.js.haml_spec.rb} +10 -17
  353. data/spec/views/leads/{update.rjs_spec.rb → update.js.haml_spec.rb} +25 -38
  354. data/spec/views/opportunities/{create.rjs_spec.rb → create.js.haml_spec.rb} +16 -26
  355. data/spec/views/opportunities/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +13 -16
  356. data/spec/views/opportunities/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +10 -18
  357. data/spec/views/opportunities/{index.rjs_spec.rb → index.js.haml_spec.rb} +7 -12
  358. data/spec/views/opportunities/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  359. data/spec/views/opportunities/{update.rjs_spec.rb → update.js.haml_spec.rb} +29 -46
  360. data/spec/views/tasks/_edit.haml_spec.rb +1 -1
  361. data/spec/views/tasks/{complete.rjs_spec.rb → complete.js.haml_spec.rb} +9 -14
  362. data/spec/views/tasks/{create.rjs_spec.rb → create.js.haml_spec.rb} +25 -33
  363. data/spec/views/tasks/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +9 -11
  364. data/spec/views/tasks/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +9 -14
  365. data/spec/views/tasks/index.haml_spec.rb +1 -2
  366. data/spec/views/tasks/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  367. data/spec/views/tasks/{update.rjs_spec.rb → update.js.haml_spec.rb} +28 -41
  368. data/spec/views/users/{avatar.rjs_spec.rb → avatar.js.haml_spec.rb} +7 -9
  369. data/spec/views/users/{change_password.rjs_spec.rb → change_password.js.haml_spec.rb} +10 -12
  370. data/spec/views/users/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +8 -10
  371. data/spec/views/users/{password.rjs_spec.rb → password.js.haml_spec.rb} +9 -11
  372. data/spec/views/users/{update.rjs_spec.rb → update.js.haml_spec.rb} +7 -15
  373. data/spec/views/users/{upload_avatar.rjs_spec.rb → upload_avatar.js.haml_spec.rb} +8 -10
  374. data/vendor/assets/javascripts/ajax-chosen-jquery.js +2 -0
  375. data/vendor/assets/javascripts/ajax-chosen-prototype.js +2 -0
  376. data/vendor/assets/javascripts/ajax-chosen.jquery.coffee +81 -0
  377. data/vendor/assets/javascripts/ajax-chosen.proto.coffee +98 -0
  378. data/vendor/assets/javascripts/jquery_timeago/index.js +17 -0
  379. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.cz.js +18 -0
  380. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.de.js +18 -0
  381. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.en-GB.js +20 -0
  382. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.en-US.js +20 -0
  383. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.es.js +18 -0
  384. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.fr-CA.js +17 -0
  385. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.fr.js +17 -0
  386. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.it.js +16 -0
  387. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.ja.js +19 -0
  388. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.js +194 -0
  389. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.pl.js +31 -0
  390. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.pt-BR.js +18 -0
  391. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.ru.js +34 -0
  392. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.sv-SE.js +18 -0
  393. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.th.js +20 -0
  394. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.zh-CN.js +20 -0
  395. data/zeus.json +2 -1
  396. metadata +240 -245
  397. data/app/assets/images/delete.png +0 -0
  398. data/app/assets/images/iconset_attribution.png +0 -0
  399. data/app/views/accounts/create.js.rjs +0 -14
  400. data/app/views/accounts/destroy.js.rjs +0 -3
  401. data/app/views/accounts/edit.js.rjs +0 -33
  402. data/app/views/accounts/index.js.rjs +0 -8
  403. data/app/views/accounts/new.js.rjs +0 -9
  404. data/app/views/accounts/show.js.erb +0 -2
  405. data/app/views/accounts/update.js.rjs +0 -17
  406. data/app/views/admin/field_groups/confirm.js.rjs +0 -6
  407. data/app/views/admin/field_groups/create.js.rjs +0 -20
  408. data/app/views/admin/field_groups/destroy.js.rjs +0 -11
  409. data/app/views/admin/field_groups/edit.js.rjs +0 -14
  410. data/app/views/admin/field_groups/new.js.rjs +0 -9
  411. data/app/views/admin/field_groups/update.js.rjs +0 -9
  412. data/app/views/admin/fields/create.js.erb +0 -19
  413. data/app/views/admin/fields/destroy.js.erb +0 -9
  414. data/app/views/admin/fields/edit.js.erb +0 -1
  415. data/app/views/admin/fields/update.js.erb +0 -13
  416. data/app/views/admin/groups/create.js.rjs +0 -11
  417. data/app/views/admin/groups/destroy.js.rjs +0 -11
  418. data/app/views/admin/groups/edit.js.rjs +0 -21
  419. data/app/views/admin/groups/index.js.rjs +0 -2
  420. data/app/views/admin/groups/new.js.rjs +0 -9
  421. data/app/views/admin/groups/update.js.rjs +0 -10
  422. data/app/views/admin/tags/confirm.js.rjs +0 -6
  423. data/app/views/admin/tags/create.js.rjs +0 -12
  424. data/app/views/admin/tags/destroy.js.rjs +0 -11
  425. data/app/views/admin/tags/edit.js.rjs +0 -21
  426. data/app/views/admin/tags/new.js.rjs +0 -8
  427. data/app/views/admin/tags/update.js.rjs +0 -10
  428. data/app/views/admin/users/confirm.js.rjs +0 -6
  429. data/app/views/admin/users/create.js.rjs +0 -11
  430. data/app/views/admin/users/destroy.js.rjs +0 -11
  431. data/app/views/admin/users/edit.js.rjs +0 -21
  432. data/app/views/admin/users/index.js.rjs +0 -3
  433. data/app/views/admin/users/new.js.rjs +0 -8
  434. data/app/views/admin/users/reactivate.js.rjs +0 -3
  435. data/app/views/admin/users/suspend.js.rjs +0 -3
  436. data/app/views/admin/users/update.js.rjs +0 -10
  437. data/app/views/campaigns/create.js.rjs +0 -18
  438. data/app/views/campaigns/destroy.js.rjs +0 -3
  439. data/app/views/campaigns/edit.js.rjs +0 -34
  440. data/app/views/campaigns/index.js.rjs +0 -8
  441. data/app/views/campaigns/new.js.rjs +0 -9
  442. data/app/views/campaigns/show.js.erb +0 -2
  443. data/app/views/campaigns/update.js.rjs +0 -21
  444. data/app/views/comments/create.js.rjs +0 -11
  445. data/app/views/comments/destroy.js.rjs +0 -6
  446. data/app/views/comments/edit.js.rjs +0 -11
  447. data/app/views/comments/new.js.rjs +0 -14
  448. data/app/views/comments/update.js.rjs +0 -11
  449. data/app/views/contacts/create.js.rjs +0 -19
  450. data/app/views/contacts/destroy.js.rjs +0 -7
  451. data/app/views/contacts/edit.js.rjs +0 -36
  452. data/app/views/contacts/index.js.rjs +0 -8
  453. data/app/views/contacts/new.js.rjs +0 -11
  454. data/app/views/contacts/show.js.erb +0 -2
  455. data/app/views/contacts/update.js.rjs +0 -22
  456. data/app/views/emails/destroy.js.rjs +0 -6
  457. data/app/views/entities/attach.js.rjs +0 -24
  458. data/app/views/entities/contacts.js.rjs +0 -3
  459. data/app/views/entities/discard.js.rjs +0 -7
  460. data/app/views/entities/leads.js.rjs +0 -3
  461. data/app/views/entities/opportunities.js.rjs +0 -3
  462. data/app/views/entities/subscription_update.js.rjs +0 -4
  463. data/app/views/entities/versions.js.erb +0 -3
  464. data/app/views/fields/group.js.rjs +0 -7
  465. data/app/views/home/index.js.rjs +0 -7
  466. data/app/views/home/options.js.rjs +0 -8
  467. data/app/views/leads/convert.js.rjs +0 -37
  468. data/app/views/leads/create.js.rjs +0 -19
  469. data/app/views/leads/destroy.js.rjs +0 -7
  470. data/app/views/leads/edit.js.rjs +0 -36
  471. data/app/views/leads/index.js.rjs +0 -8
  472. data/app/views/leads/new.js.rjs +0 -9
  473. data/app/views/leads/promote.js.rjs +0 -27
  474. data/app/views/leads/reject.js.rjs +0 -10
  475. data/app/views/leads/show.js.erb +0 -2
  476. data/app/views/leads/update.js.rjs +0 -27
  477. data/app/views/lists/create.js.rjs +0 -9
  478. data/app/views/lists/destroy.js.rjs +0 -1
  479. data/app/views/opportunities/contacts.js.rjs +0 -3
  480. data/app/views/opportunities/create.js.rjs +0 -29
  481. data/app/views/opportunities/destroy.js.rjs +0 -11
  482. data/app/views/opportunities/edit.js.rjs +0 -36
  483. data/app/views/opportunities/index.js.rjs +0 -8
  484. data/app/views/opportunities/new.js.rjs +0 -12
  485. data/app/views/opportunities/show.js.erb +0 -2
  486. data/app/views/opportunities/update.js.rjs +0 -26
  487. data/app/views/tasks/complete.js.rjs +0 -17
  488. data/app/views/tasks/create.js.rjs +0 -41
  489. data/app/views/tasks/destroy.js.rjs +0 -7
  490. data/app/views/tasks/discard.rjs +0 -1
  491. data/app/views/tasks/edit.js.rjs +0 -23
  492. data/app/views/tasks/filter.js.rjs +0 -1
  493. data/app/views/tasks/new.js.rjs +0 -9
  494. data/app/views/tasks/update.js.rjs +0 -21
  495. data/app/views/users/avatar.js.rjs +0 -10
  496. data/app/views/users/change_password.js.rjs +0 -15
  497. data/app/views/users/edit.js.rjs +0 -10
  498. data/app/views/users/password.js.rjs +0 -11
  499. data/app/views/users/update.js.rjs +0 -10
  500. data/app/views/users/upload_avatar.js.rjs +0 -8
  501. data/lib/fat_free_crm/secret_token_generator.rb +0 -65
  502. data/spec/lib/secret_token_generator_spec.rb +0 -79
  503. data/spec/models/users/abilities/user_ability_spec.rb +0 -58
  504. data/spec/support/rjs_support.rb +0 -14
  505. data/vendor/assets/images/brief.png +0 -0
  506. data/vendor/assets/images/full.png +0 -0
  507. data/vendor/assets/images/long.png +0 -0
  508. data/vendor/assets/images/tab_icons/accounts.png +0 -0
  509. data/vendor/assets/images/tab_icons/accounts_active.png +0 -0
  510. data/vendor/assets/images/tab_icons/campaigns.png +0 -0
  511. data/vendor/assets/images/tab_icons/campaigns_active.png +0 -0
  512. data/vendor/assets/images/tab_icons/contacts.png +0 -0
  513. data/vendor/assets/images/tab_icons/contacts_active.png +0 -0
  514. data/vendor/assets/images/tab_icons/dashboard.png +0 -0
  515. data/vendor/assets/images/tab_icons/dashboard_active.png +0 -0
  516. data/vendor/assets/images/tab_icons/leads.png +0 -0
  517. data/vendor/assets/images/tab_icons/leads_active.png +0 -0
  518. data/vendor/assets/images/tab_icons/opportunities.png +0 -0
  519. data/vendor/assets/images/tab_icons/opportunities_active.png +0 -0
  520. data/vendor/assets/images/tab_icons/tasks.png +0 -0
  521. data/vendor/assets/images/tab_icons/tasks_active.png +0 -0
@@ -21,82 +21,82 @@ describe 'FatFreeCRM::Fields' do
21
21
  it do
22
22
  Foo.new.should respond_to(:field_groups)
23
23
  end
24
-
24
+
25
25
  it do
26
26
  Foo.should respond_to(:serialize_custom_fields!)
27
27
  end
28
-
28
+
29
29
  it do
30
30
  Foo.should respond_to(:fields)
31
31
  end
32
-
32
+
33
33
  it "calling has_fields should invoke serialize_custom_fields!" do
34
34
  Bar.should_receive(:serialize_custom_fields!)
35
35
  Bar.has_fields
36
36
  end
37
-
37
+
38
38
  describe "field_groups" do
39
-
39
+
40
40
  it "should call FieldGroup" do
41
41
  ActiveRecord::Base.connection.should_receive(:table_exists?).with('field_groups').and_return(true)
42
- dummy_scope = mock
42
+ dummy_scope = double
43
43
  dummy_scope.should_receive(:order).with(:position)
44
44
  FieldGroup.should_receive(:where).and_return(dummy_scope)
45
45
  Foo.new.field_groups
46
46
  end
47
-
47
+
48
48
  it "should not call FieldGroup if table doesn't exist (migrations not yet run)" do
49
49
  ActiveRecord::Base.connection.should_receive(:table_exists?).with('field_groups').and_return(false)
50
50
  Foo.new.field_groups.should == []
51
51
  end
52
-
52
+
53
53
  end
54
-
54
+
55
55
  describe "fields" do
56
-
56
+
57
57
  before(:each) do
58
- @f1 = mock(Field)
59
- @f2 = mock(Field)
60
- @f3 = mock(Field)
61
- @field_groups = [mock(FieldGroup, :fields => [@f1, @f2]), mock(FieldGroup, :fields => [@f3])]
58
+ @f1 = double(Field)
59
+ @f2 = double(Field)
60
+ @f3 = double(Field)
61
+ @field_groups = [double(FieldGroup, :fields => [@f1, @f2]), double(FieldGroup, :fields => [@f3])]
62
62
  end
63
-
63
+
64
64
  it "should convert field_groups into a flattened list of fields" do
65
65
  Foo.should_receive(:field_groups).and_return(@field_groups)
66
66
  Foo.fields.should == [@f1, @f2, @f3]
67
67
  end
68
-
68
+
69
69
  end
70
-
70
+
71
71
  describe "serialize_custom_fields!" do
72
-
72
+
73
73
  before(:each) do
74
- @f1 = mock(Field, :as => 'check_boxes', :name => 'field1')
75
- @f2 = mock(Field, :as => 'date', :name => 'field2')
74
+ @f1 = double(Field, :as => 'check_boxes', :name => 'field1')
75
+ @f2 = double(Field, :as => 'date', :name => 'field2')
76
76
  end
77
-
77
+
78
78
  it "should serialize checkbox fields as Array" do
79
79
  Foo.stub(:serialized_attributes).and_return( {:field1 => @f1, :field2 => @f2} )
80
80
  Foo.should_receive(:fields).and_return([@f1, @f2])
81
81
  Foo.should_receive(:serialize).with(:field1, Array)
82
82
  Foo.serialize_custom_fields!
83
83
  end
84
-
84
+
85
85
  end
86
-
86
+
87
87
  it "should validate custom fields" do
88
88
  foo = Foo.new
89
89
  foo.should_receive(:custom_fields_validator)
90
90
  foo.should be_valid
91
91
  end
92
-
92
+
93
93
  describe "custom_fields_validator" do
94
-
94
+
95
95
  before(:each) do
96
- @f1 = mock(Field)
97
- @field_groups = [ mock(FieldGroup, :fields => [@f1]) ]
96
+ @f1 = double(Field)
97
+ @field_groups = [ double(FieldGroup, :fields => [@f1]) ]
98
98
  end
99
-
99
+
100
100
  it "should call custom_validator on each custom field" do
101
101
  foo = Foo.new
102
102
  @f1.should_receive(:custom_validator).with(foo)
@@ -105,5 +105,5 @@ describe 'FatFreeCRM::Fields' do
105
105
  end
106
106
 
107
107
  end
108
-
108
+
109
109
  end
@@ -67,7 +67,7 @@ describe FatFreeCRM::MailProcessor::Base do
67
67
  describe "Discarding a message" do
68
68
  before(:each) do
69
69
  mock_connect
70
- @uid = mock
70
+ @uid = double
71
71
  @crawler.send(:connect!)
72
72
  end
73
73
 
@@ -90,7 +90,7 @@ describe FatFreeCRM::MailProcessor::Base do
90
90
  describe "Archiving a message" do
91
91
  before(:each) do
92
92
  mock_connect
93
- @uid = mock
93
+ @uid = double
94
94
  @crawler.send(:connect!)
95
95
  end
96
96
 
@@ -112,16 +112,16 @@ describe FatFreeCRM::MailProcessor::Base do
112
112
  #------------------------------------------------------------------------------
113
113
  describe "Validating email" do
114
114
  before(:each) do
115
- @email = mock
115
+ @email = double
116
116
  end
117
117
 
118
118
  it "should be valid email if its contents type is text/plain" do
119
- @email.stub!(:content_type).and_return("text/plain")
119
+ @email.stub(:content_type).and_return("text/plain")
120
120
  @crawler.send(:is_valid?, @email).should == true
121
121
  end
122
122
 
123
123
  it "should be invalid email if its contents type is not text/plain" do
124
- @email.stub!(:content_type).and_return("text/html")
124
+ @email.stub(:content_type).and_return("text/html")
125
125
  @crawler.send(:is_valid?, @email).should == false
126
126
  end
127
127
  end
@@ -130,8 +130,8 @@ describe FatFreeCRM::MailProcessor::Base do
130
130
  describe "Finding email sender among users" do
131
131
  before(:each) do
132
132
  @from = [ "Aaron@Example.Com", "Ben@Example.com" ]
133
- @email = mock
134
- @email.stub!(:from).and_return(@from)
133
+ @email = double
134
+ @email.stub(:from).and_return(@from)
135
135
  end
136
136
 
137
137
  it "should find non-suspended user that matches From: field" do
@@ -288,17 +288,17 @@ describe FatFreeCRM::MailProcessor::Dropbox do
288
288
  describe "'access'" do
289
289
 
290
290
  it "should be 'Private' if default setting is 'Private'" do
291
- Setting.stub!(:default_access).and_return('Private')
291
+ Setting.stub(:default_access).and_return('Private')
292
292
  @crawler.send(:default_access).should == "Private"
293
293
  end
294
294
 
295
295
  it "should be 'Public' if default setting is 'Public'" do
296
- Setting.stub!(:default_access).and_return('Public')
296
+ Setting.stub(:default_access).and_return('Public')
297
297
  @crawler.send(:default_access).should == "Public"
298
298
  end
299
299
 
300
300
  it "should be 'Private' if default setting is 'Shared'" do
301
- Setting.stub!(:default_access).and_return('Shared')
301
+ Setting.stub(:default_access).and_return('Shared')
302
302
  @crawler.send(:default_access).should == "Private"
303
303
  end
304
304
 
@@ -11,13 +11,13 @@ describe FatFreeCRM::ViewFactory do
11
11
  before(:each) do
12
12
  FatFreeCRM::ViewFactory.send(:class_variable_set, '@@views', [])
13
13
  end
14
-
14
+
15
15
  describe "initialization" do
16
-
16
+
17
17
  before(:each) do
18
- @view_params = {:name => 'brief', :title => 'Brief View', :icon => 'brief.png', :controllers => ['contacts'], :actions => ['show', 'index']}
18
+ @view_params = {:name => 'brief', :title => 'Brief View', :icon => 'fa-bars', :controllers => ['contacts'], :actions => ['show', 'index']}
19
19
  end
20
-
20
+
21
21
  it "should initialize with required parameters" do
22
22
  view = FatFreeCRM::ViewFactory.new @view_params
23
23
  view.name.should == 'brief'
@@ -26,48 +26,48 @@ describe FatFreeCRM::ViewFactory do
26
26
  view.actions.should include('show')
27
27
  view.actions.should include('index')
28
28
  end
29
-
29
+
30
30
  it "should register view with ViewFactory" do
31
31
  FatFreeCRM::ViewFactory.send(:class_variable_get, '@@views').size.should == 0
32
32
  FatFreeCRM::ViewFactory.new @view_params
33
33
  FatFreeCRM::ViewFactory.send(:class_variable_get, '@@views').size.should == 1
34
34
  end
35
-
35
+
36
36
  it "should not register the same view twice" do
37
37
  FatFreeCRM::ViewFactory.new @view_params
38
38
  FatFreeCRM::ViewFactory.new @view_params
39
39
  views = FatFreeCRM::ViewFactory.send(:class_variable_get, '@@views')
40
40
  views.size.should == 1
41
41
  end
42
-
42
+
43
43
  end
44
44
 
45
45
  describe "views_for" do
46
-
46
+
47
47
  before(:each) do
48
48
  @v1 = FatFreeCRM::ViewFactory.new :name => 'brief', :title => 'Brief View', :controllers => ['contacts'], :actions => ['show', 'index']
49
49
  @v2 = FatFreeCRM::ViewFactory.new :name => 'long', :title => 'Long View', :controllers => ['contacts'], :actions => ['show']
50
50
  @v3 = FatFreeCRM::ViewFactory.new :name => 'full', :title => 'Full View', :controllers => ['accounts'], :actions => ['show']
51
51
  end
52
-
52
+
53
53
  it "should return 'brief' view for ContactsController#index" do
54
54
  FatFreeCRM::ViewFactory.views_for(:controller => 'contacts', :action => 'index').should == [@v1]
55
55
  end
56
-
56
+
57
57
  it "should return 'brief' and 'long' view for ContactsController#show" do
58
58
  views = FatFreeCRM::ViewFactory.views_for(:controller => 'contacts', :action => 'show')
59
59
  views.should include(@v1)
60
60
  views.should include(@v2)
61
61
  end
62
-
62
+
63
63
  it "should return 'full' view for AccountsController#show" do
64
64
  FatFreeCRM::ViewFactory.views_for(:controller => 'accounts', :action => 'show').should == [@v3]
65
65
  end
66
-
66
+
67
67
  it "should return no views for TasksController#show" do
68
68
  FatFreeCRM::ViewFactory.views_for(:controller => 'tasks', :action => 'show').should == []
69
69
  end
70
-
70
+
71
71
  end
72
-
72
+
73
73
  end
@@ -37,7 +37,7 @@ describe Opportunity do
37
37
 
38
38
  it "should be possible to create opportunity with the same name" do
39
39
  first = FactoryGirl.create(:opportunity, :name => "Hello", :user => current_user)
40
- lambda { FactoryGirl.create(:opportunity, :name => "Hello", :user => current_user) }.should_not raise_error(ActiveRecord::RecordInvalid)
40
+ expect { FactoryGirl.create(:opportunity, :name => "Hello", :user => current_user) }.to_not raise_error()
41
41
  end
42
42
 
43
43
  it "have a default stage" do
@@ -12,28 +12,28 @@ describe CustomFieldDatePair do
12
12
  before(:each) do
13
13
  @from = CustomFieldDatePair.new(:name => 'cf_event_from')
14
14
  @to = CustomFieldDatePair.new(:name => 'cf_event_to')
15
- @from.stub!(:paired_with).and_return(@to)
15
+ @from.stub(:paired_with).and_return(@to)
16
16
  @today = Date.today
17
17
  @today_str = @today.strftime(I18n.t("date.formats.mmddyy"))
18
18
  end
19
19
 
20
20
  it "should be from..." do
21
- foo = mock(:cf_event_from => @today, :cf_event_to => nil)
21
+ foo = double(:cf_event_from => @today, :cf_event_to => nil)
22
22
  @from.render_value(foo).should == "From #{@today_str}"
23
23
  end
24
24
 
25
25
  it "should be until..." do
26
- foo = mock(:cf_event_from => nil, :cf_event_to => @today)
26
+ foo = double(:cf_event_from => nil, :cf_event_to => @today)
27
27
  @from.render_value(foo).should == "Until #{@today_str}"
28
28
  end
29
29
 
30
30
  it "should be from ... to" do
31
- foo = mock(:cf_event_from => @today, :cf_event_to => @today)
31
+ foo = double(:cf_event_from => @today, :cf_event_to => @today)
32
32
  @from.render_value(foo).should == "From #{@today_str} to #{@today_str}"
33
33
  end
34
34
 
35
35
  it "should be empty string" do
36
- foo = mock(:cf_event_from => nil, :cf_event_to => nil)
36
+ foo = double(:cf_event_from => nil, :cf_event_to => nil)
37
37
  @from.render_value(foo).should == ""
38
38
  end
39
39
 
@@ -44,38 +44,38 @@ describe CustomFieldDatePair do
44
44
  before(:each) do
45
45
  @from = CustomFieldDatePair.new(:name => 'cf_event_from')
46
46
  @to = CustomFieldDatePair.new(:name => 'cf_event_to', :pair_id => 1)
47
- CustomFieldPair.stub!(:find).and_return(@from)
47
+ CustomFieldPair.stub(:find).and_return(@from)
48
48
  @today = Date.today
49
49
  @today_str = @today.strftime(I18n.t("date.formats.mmddyy"))
50
50
  end
51
51
 
52
52
  it "when from is nil it should be valid" do
53
- foo = mock(:cf_event_from => nil, :cf_event_to => @today)
53
+ foo = double(:cf_event_from => nil, :cf_event_to => @today)
54
54
  foo.should_not_receive(:errors)
55
55
  @to.custom_validator(foo)
56
56
  end
57
57
 
58
58
  it "when to is nil it should be valid" do
59
- foo = mock(:cf_event_from => @today, :cf_event_to => nil)
59
+ foo = double(:cf_event_from => @today, :cf_event_to => nil)
60
60
  foo.should_not_receive(:errors)
61
61
  @to.custom_validator(foo)
62
62
  end
63
63
 
64
64
  it "when from <= to it should be valid" do
65
- foo = mock(:cf_event_from => @today, :cf_event_to => @today)
65
+ foo = double(:cf_event_from => @today, :cf_event_to => @today)
66
66
  foo.should_not_receive(:errors)
67
67
  @to.custom_validator(foo)
68
68
  end
69
69
 
70
70
  it "when from > to it should not be valid" do
71
- foo = mock(:cf_event_from => @today, :cf_event_to => @today - 1.day)
72
- err = mock(:errors); err.stub(:add)
71
+ foo = double(:cf_event_from => @today, :cf_event_to => @today - 1.day)
72
+ err = double(:errors); err.stub(:add)
73
73
  foo.should_receive(:errors).and_return(err)
74
74
  @to.custom_validator(foo)
75
75
  end
76
76
 
77
77
  it "should ignore validation when called on from" do
78
- foo = mock(:cf_event_from => @today, :cf_event_to => @today - 1.day)
78
+ foo = double(:cf_event_from => @today, :cf_event_to => @today - 1.day)
79
79
  foo.should_not_receive(:errors)
80
80
  CustomFieldPair.should_not_receive(:find)
81
81
  @from.custom_validator(foo)
@@ -83,8 +83,8 @@ describe CustomFieldDatePair do
83
83
 
84
84
  it "should call custom field validation on super class" do
85
85
  from = CustomFieldDatePair.new(:name => 'cf_event_from', :required => true)
86
- foo = mock(:cf_event_from => nil)
87
- err = mock(:errors); err.stub(:add)
86
+ foo = double(:cf_event_from => nil)
87
+ err = double(:errors); err.stub(:add)
88
88
  foo.should_receive(:errors).and_return(err)
89
89
  from.custom_validator(foo)
90
90
  end
@@ -13,31 +13,31 @@ describe CustomFieldPair do
13
13
  it "should respond to pair" do
14
14
  CustomFieldPair.new.should respond_to(:pair)
15
15
  end
16
-
16
+
17
17
  describe "create_pair" do
18
-
18
+
19
19
  before(:each) do
20
20
  @field = {'as' => 'foopair', 'field_group_id' => 1, 'label' => 'Event'}
21
21
  @pair1 = {'name' => 'pair1'}
22
22
  @pair2 = {'name' => 'pair2'}
23
23
  @params = { 'field' => @field, 'pair' => {'0' => @pair1, '1' => @pair2} }
24
24
  end
25
-
25
+
26
26
  it "should create the pair" do
27
27
  params1 = @field.merge(@pair1)
28
- foo1 = mock(:id => 3, :required => true, :disabled => 'false')
28
+ foo1 = double(:id => 3, :required => true, :disabled => 'false')
29
29
  CustomFieldFooPair.should_receive(:create).with( params1 ).and_return(foo1)
30
30
  params2 = @field.merge(@pair2).merge('pair_id' => 3, 'required' => true, 'disabled' => 'false')
31
- foo2 = mock(:id => 5)
31
+ foo2 = double(:id => 5)
32
32
  CustomFieldFooPair.should_receive(:create).with( params2 ).and_return(foo2)
33
33
 
34
34
  CustomFieldPair.create_pair(@params).should == [foo1, foo2]
35
35
  end
36
-
36
+
37
37
  end
38
38
 
39
39
  describe "update_pair" do
40
-
40
+
41
41
  before(:each) do
42
42
  @field = {'as' => 'foopair', 'field_group_id' => 1, 'label' => 'Event'}
43
43
  @pair1 = {'name' => 'pair1'}
@@ -46,9 +46,9 @@ describe CustomFieldPair do
46
46
  end
47
47
 
48
48
  it "should update the pair" do
49
- foo1 = mock(:required => true, :disabled => 'false')
49
+ foo1 = double(:required => true, :disabled => 'false')
50
50
  foo1.should_receive(:update_attributes).with( @field.merge(@pair1) )
51
- foo2 = mock
51
+ foo2 = double
52
52
  foo2.should_receive(:update_attributes).with( @field.merge(@pair2).merge('required' => true, 'disabled' => 'false') )
53
53
  foo1.should_receive(:paired_with).and_return(foo2)
54
54
  CustomFieldPair.should_receive(:find).with('3').and_return(foo1)
@@ -57,19 +57,19 @@ describe CustomFieldPair do
57
57
  end
58
58
 
59
59
  end
60
-
60
+
61
61
  describe "paired_with" do
62
-
62
+
63
63
  before(:each) do
64
64
  @field1 = CustomFieldDatePair.new(:name => 'cf_event_from')
65
65
  @field2 = CustomFieldDatePair.new(:name => 'cf_event_to')
66
66
  end
67
-
67
+
68
68
  it "should return the 2nd field" do
69
69
  @field1.should_receive(:pair).and_return(@field2)
70
70
  @field1.paired_with.should == @field2
71
71
  end
72
-
72
+
73
73
  it "should return the 1st field" do
74
74
  @field2.should_receive(:pair).and_return(nil)
75
75
  @field2.should_receive(:id).and_return(1)
@@ -49,7 +49,7 @@ describe CustomField do
49
49
  columns = []
50
50
  %w(cf_test_field cf_test_field_2 cf_test_field_3 cf_test_field_4).each do |field|
51
51
  c.send(:generate_column_name).should == field
52
- c.stub!(:klass_column_names).and_return( columns << field )
52
+ c.stub(:klass_column_names).and_return( columns << field )
53
53
  end
54
54
 
55
55
  end
@@ -112,16 +112,16 @@ describe CustomField do
112
112
 
113
113
  it "should have errors if custom field is required" do
114
114
  event = CustomField.new(:name => 'cf_event', :required => true)
115
- foo = mock(:cf_event => nil)
116
- err = mock(:errors); err.stub(:add)
115
+ foo = double(:cf_event => nil)
116
+ err = double(:errors); err.stub(:add)
117
117
  foo.should_receive(:errors).and_return(err)
118
118
  event.custom_validator(foo)
119
119
  end
120
120
 
121
121
  it "should have errors if custom field is longer than maxlength" do
122
122
  event = CustomField.new(:name => 'cf_event', :maxlength => 5)
123
- foo = mock(:cf_event => "This is too long")
124
- err = mock(:errors); err.stub(:add)
123
+ foo = double(:cf_event => "This is too long")
124
+ err = double(:errors); err.stub(:add)
125
125
  foo.should_receive(:errors).and_return(err)
126
126
  event.custom_validator(foo)
127
127
  end