fat_free_crm 0.13.6 → 0.14.0

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

Potentially problematic release.


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

Files changed (534) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/.travis.yml +8 -5
  4. data/CHANGELOG +26 -0
  5. data/Gemfile +26 -26
  6. data/Gemfile.lock +280 -250
  7. data/Guardfile +0 -1
  8. data/README.md +7 -9
  9. data/Rakefile +1 -1
  10. data/app/assets/javascripts/application.js.erb +1 -0
  11. data/app/assets/javascripts/crm.js.coffee +6 -7
  12. data/app/assets/javascripts/search.js.coffee +7 -1
  13. data/app/assets/stylesheets/about.css.scss +10 -0
  14. data/app/assets/stylesheets/application.css.erb +2 -0
  15. data/app/assets/stylesheets/common.scss +1 -1
  16. data/app/controllers/admin/application_controller.rb +3 -3
  17. data/app/controllers/admin/field_groups_controller.rb +12 -7
  18. data/app/controllers/admin/fields_controller.rb +21 -17
  19. data/app/controllers/admin/groups_controller.rb +10 -4
  20. data/app/controllers/admin/plugins_controller.rb +1 -2
  21. data/app/controllers/admin/settings_controller.rb +1 -2
  22. data/app/controllers/admin/tags_controller.rb +10 -4
  23. data/app/controllers/admin/users_controller.rb +32 -12
  24. data/app/controllers/application_controller.rb +58 -38
  25. data/app/controllers/authentications_controller.rb +5 -8
  26. data/app/controllers/comments_controller.rb +15 -11
  27. data/app/controllers/emails_controller.rb +1 -2
  28. data/app/controllers/entities/accounts_controller.rb +20 -20
  29. data/app/controllers/entities/campaigns_controller.rb +25 -22
  30. data/app/controllers/entities/contacts_controller.rb +25 -24
  31. data/app/controllers/entities/leads_controller.rb +33 -31
  32. data/app/controllers/entities/opportunities_controller.rb +31 -28
  33. data/app/controllers/entities_controller.rb +26 -22
  34. data/app/controllers/home_controller.rb +18 -18
  35. data/app/controllers/lists_controller.rb +11 -7
  36. data/app/controllers/passwords_controller.rb +5 -6
  37. data/app/controllers/tasks_controller.rb +23 -18
  38. data/app/controllers/users_controller.rb +31 -7
  39. data/app/helpers/accounts_helper.rb +40 -42
  40. data/app/helpers/addresses_helper.rb +1 -3
  41. data/app/helpers/admin/application_helper.rb +4 -4
  42. data/app/helpers/admin/field_groups_helper.rb +5 -7
  43. data/app/helpers/admin/fields_helper.rb +2 -3
  44. data/app/helpers/admin/plugins_helper.rb +0 -1
  45. data/app/helpers/admin/settings_helper.rb +0 -1
  46. data/app/helpers/admin/tags_helper.rb +1 -1
  47. data/app/helpers/admin/users_helper.rb +16 -18
  48. data/app/helpers/application_helper.rb +127 -119
  49. data/app/helpers/authentications_helper.rb +0 -1
  50. data/app/helpers/campaigns_helper.rb +5 -7
  51. data/app/helpers/comments_helper.rb +0 -1
  52. data/app/helpers/contacts_helper.rb +0 -1
  53. data/app/helpers/home_helper.rb +14 -14
  54. data/app/helpers/javascript_helper.rb +30 -0
  55. data/app/helpers/leads_helper.rb +7 -7
  56. data/app/helpers/opportunities_helper.rb +8 -10
  57. data/app/helpers/passwords_helper.rb +0 -1
  58. data/app/helpers/tags_helper.rb +1 -3
  59. data/app/helpers/tasks_helper.rb +24 -26
  60. data/app/helpers/users_helper.rb +6 -7
  61. data/app/helpers/versions_helper.rb +3 -5
  62. data/app/inputs/date_pair_input.rb +6 -7
  63. data/app/inputs/date_time_input.rb +3 -4
  64. data/app/inputs/datetime_pair_input.rb +0 -1
  65. data/app/inputs/text_input.rb +2 -2
  66. data/app/mailers/dropbox_mailer.rb +4 -7
  67. data/app/mailers/subscription_mailer.rb +4 -5
  68. data/app/mailers/user_mailer.rb +7 -9
  69. data/app/models/entities/account.rb +31 -28
  70. data/app/models/entities/account_contact.rb +2 -1
  71. data/app/models/entities/account_opportunity.rb +1 -1
  72. data/app/models/entities/campaign.rb +22 -19
  73. data/app/models/entities/contact.rb +55 -53
  74. data/app/models/entities/contact_opportunity.rb +1 -1
  75. data/app/models/entities/lead.rb +49 -41
  76. data/app/models/entities/opportunity.rb +38 -38
  77. data/app/models/fields/custom_field.rb +21 -27
  78. data/app/models/fields/custom_field_date_pair.rb +7 -8
  79. data/app/models/fields/custom_field_datetime_pair.rb +0 -2
  80. data/app/models/fields/custom_field_pair.rb +8 -10
  81. data/app/models/fields/field.rb +29 -30
  82. data/app/models/fields/field_group.rb +4 -4
  83. data/app/models/list.rb +1 -1
  84. data/app/models/observers/entity_observer.rb +1 -1
  85. data/app/models/observers/lead_observer.rb +1 -1
  86. data/app/models/observers/opportunity_observer.rb +1 -1
  87. data/app/models/observers/task_observer.rb +1 -1
  88. data/app/models/polymorphic/address.rb +7 -7
  89. data/app/models/polymorphic/avatar.rb +8 -9
  90. data/app/models/polymorphic/comment.rb +16 -10
  91. data/app/models/polymorphic/email.rb +13 -6
  92. data/app/models/polymorphic/tag.rb +2 -2
  93. data/app/models/polymorphic/task.rb +45 -45
  94. data/{config/initializers/paper_trail.rb → app/models/polymorphic/version.rb} +26 -31
  95. data/app/models/setting.rb +12 -17
  96. data/app/models/users/ability.rb +5 -6
  97. data/app/models/users/authentication.rb +6 -5
  98. data/app/models/users/group.rb +1 -3
  99. data/app/models/users/permission.rb +3 -3
  100. data/app/models/users/preference.rb +7 -7
  101. data/app/models/users/user.rb +36 -43
  102. data/app/views/accounts/_top_section.html.haml +2 -2
  103. data/app/views/accounts/edit.js.haml +0 -1
  104. data/app/views/admin/fields/_field.html.haml +1 -1
  105. data/app/views/admin/tags/_tag.html.haml +1 -1
  106. data/app/views/admin/users/_user.html.haml +4 -4
  107. data/app/views/campaigns/_top_section.html.haml +1 -1
  108. data/app/views/campaigns/edit.js.haml +0 -2
  109. data/app/views/contacts/_top_section.html.haml +1 -1
  110. data/app/views/contacts/edit.js.haml +0 -1
  111. data/app/views/entities/_basic_search.html.haml +1 -1
  112. data/app/views/home/_account.html.haml +2 -2
  113. data/app/views/home/_opportunity.html.haml +2 -2
  114. data/app/views/layouts/_about.html.haml +1 -1
  115. data/app/views/leads/_top_section.html.haml +1 -1
  116. data/app/views/leads/edit.js.haml +0 -2
  117. data/app/views/lists/_sidebar.html.haml +1 -1
  118. data/app/views/opportunities/_top_section.html.haml +2 -2
  119. data/app/views/opportunities/edit.js.haml +0 -1
  120. data/app/views/shared/_tags.html.haml +2 -1
  121. data/app/views/tasks/_edit.html.haml +2 -3
  122. data/app/views/tasks/_top_section.html.haml +1 -1
  123. data/app/views/users/_user.html.haml +2 -1
  124. data/app/views/users/opportunities_overview.html.haml +2 -2
  125. data/bin/bundle +3 -0
  126. data/bin/rails +4 -0
  127. data/bin/rake +4 -0
  128. data/config/application.rb +16 -33
  129. data/config/boot.rb +1 -1
  130. data/config/database.mysql.mac.yml +1 -0
  131. data/config/database.mysql.yml +1 -0
  132. data/config/database.postgres.docker.yml +1 -1
  133. data/config/database.postgres.yml +1 -0
  134. data/config/database.sqlite.yml +1 -0
  135. data/config/deploy.example.rb +3 -5
  136. data/config/environments/development.rb +13 -14
  137. data/config/environments/production.rb +8 -7
  138. data/config/environments/staging.rb +43 -41
  139. data/config/environments/test.rb +12 -14
  140. data/config/initializers/assets.rb +14 -0
  141. data/config/initializers/backtrace_silencers.rb +7 -0
  142. data/config/initializers/cookies_serializer.rb +3 -0
  143. data/config/initializers/custom_field_ransack_translations.rb +1 -1
  144. data/config/initializers/filter_parameter_logging.rb +4 -0
  145. data/config/initializers/inflections.rb +16 -0
  146. data/config/initializers/mime_types.rb +0 -1
  147. data/config/initializers/paginate_arrays.rb +0 -1
  148. data/config/initializers/ransack.rb +5 -5
  149. data/config/initializers/session_store.rb +5 -0
  150. data/config/initializers/simple_form.rb +1 -1
  151. data/config/initializers/views.rb +33 -33
  152. data/config/initializers/wrap_parameters.rb +14 -0
  153. data/config/locales/cz_fat_free_crm.yml +1 -1
  154. data/config/locales/de_fat_free_crm.yml +2 -2
  155. data/config/locales/en-GB_fat_free_crm.yml +2 -3
  156. data/config/locales/en-US_fat_free_crm.yml +2 -3
  157. data/config/locales/en.yml +23 -0
  158. data/config/locales/es-CL.yml +227 -0
  159. data/config/locales/es-CL_fat_free_crm.yml +929 -0
  160. data/config/locales/es-CL_ransack.yml +91 -0
  161. data/config/locales/es.yml +53 -59
  162. data/config/locales/es_fat_free_crm.yml +708 -370
  163. data/config/locales/es_ransack.yml +91 -0
  164. data/config/locales/fr-CA_fat_free_crm.yml +7 -7
  165. data/config/locales/fr_fat_free_crm.yml +285 -81
  166. data/config/locales/it_fat_free_crm.yml +1 -1
  167. data/config/locales/ja_fat_free_crm.yml +1 -1
  168. data/config/locales/nl.yml +210 -0
  169. data/config/locales/nl_fat_free_crm.yml +920 -0
  170. data/config/locales/nl_ransack.yml +91 -0
  171. data/config/locales/pl_fat_free_crm.yml +1 -1
  172. data/config/locales/pt-BR_fat_free_crm.yml +111 -38
  173. data/config/locales/ru_fat_free_crm.yml +3 -4
  174. data/config/locales/sv-SE_fat_free_crm.yml +1 -1
  175. data/config/locales/th.rb +157 -158
  176. data/config/locales/th_fat_free_crm.yml +1 -1
  177. data/config/locales/zh-CN_fat_free_crm.yml +3 -4
  178. data/config/routes.rb +93 -94
  179. data/config/unicorn.rb +25 -2
  180. data/custom_plan.rb +0 -2
  181. data/db/demo/accounts.yml +4 -5
  182. data/db/demo/addresses.yml +5 -5
  183. data/db/demo/campaigns.yml +2 -2
  184. data/db/demo/comments.yml +1 -1
  185. data/db/demo/contacts.yml +8 -8
  186. data/db/demo/emails.yml +5 -5
  187. data/db/demo/leads.yml +10 -10
  188. data/db/demo/opportunities.yml +2 -2
  189. data/db/demo/tasks.yml +2 -2
  190. data/db/demo/users.yml +12 -16
  191. data/db/migrate/20100928030598_create_sessions.rb +1 -2
  192. data/db/migrate/20100928030599_create_users.rb +24 -25
  193. data/db/migrate/20100928030600_create_openid_tables.rb +11 -12
  194. data/db/migrate/20100928030601_create_accounts.rb +14 -15
  195. data/db/migrate/20100928030602_create_permissions.rb +2 -3
  196. data/db/migrate/20100928030603_create_settings.rb +4 -5
  197. data/db/migrate/20100928030604_create_preferences.rb +3 -4
  198. data/db/migrate/20100928030605_create_campaigns.rb +19 -20
  199. data/db/migrate/20100928030606_create_leads.rb +26 -27
  200. data/db/migrate/20100928030607_create_contacts.rb +26 -27
  201. data/db/migrate/20100928030608_create_opportunities.rb +15 -16
  202. data/db/migrate/20100928030609_create_account_contacts.rb +2 -3
  203. data/db/migrate/20100928030610_create_account_opportunities.rb +2 -3
  204. data/db/migrate/20100928030611_create_contact_opportunities.rb +3 -4
  205. data/db/migrate/20100928030612_create_tasks.rb +14 -15
  206. data/db/migrate/20100928030613_create_comments.rb +6 -7
  207. data/db/migrate/20100928030614_create_activities.rb +6 -7
  208. data/db/migrate/20100928030615_create_avatars.rb +5 -6
  209. data/db/migrate/20100928030616_rename_remember_token.rb +0 -1
  210. data/db/migrate/20100928030617_drop_openid_tables.rb +11 -11
  211. data/db/migrate/20100928030618_add_admin_to_users.rb +1 -2
  212. data/db/migrate/20100928030619_add_suspended_to_users.rb +0 -1
  213. data/db/migrate/20100928030620_remove_uuid.rb +3 -3
  214. data/db/migrate/20100928030621_add_email_to_accounts.rb +1 -2
  215. data/db/migrate/20100928030622_add_background_info_to_models.rb +0 -1
  216. data/db/migrate/20100928030623_create_addresses.rb +14 -16
  217. data/db/migrate/20100928030624_add_index_on_permissions.rb +2 -3
  218. data/db/migrate/20100928030625_create_emails.rb +15 -16
  219. data/db/migrate/20100928030626_add_state_to_timeline_objects.rb +2 -3
  220. data/db/migrate/20100928030627_acts_as_taggable_on_migration.rb +2 -3
  221. data/db/migrate/20101221123456_add_single_access_token_to_users.rb +0 -1
  222. data/db/migrate/20101221345678_add_rating_and_category_to_accounts.rb +2 -3
  223. data/db/migrate/20110719082054_add_skype_to_contacts_and_leads.rb +2 -3
  224. data/db/migrate/20111101083437_create_fields.rb +14 -15
  225. data/db/migrate/20111101090312_create_field_groups.rb +4 -5
  226. data/db/migrate/20111116091952_add_field_groups_tag_id.rb +0 -1
  227. data/db/migrate/20111117041311_change_fields_collection_to_text.rb +0 -1
  228. data/db/migrate/20111201030535_add_field_groups_klass_name.rb +4 -4
  229. data/db/migrate/20120121054235_create_lists.rb +1 -1
  230. data/db/migrate/20120216031616_create_versions.rb +5 -5
  231. data/db/migrate/20120216042541_is_paranoid_to_paper_trail.rb +1 -3
  232. data/db/migrate/20120224073107_remove_default_value_and_clear_settings.rb +1 -1
  233. data/db/migrate/20120316045804_activities_to_versions.rb +6 -6
  234. data/db/migrate/20120405080727_change_subscribed_users_to_set.rb +5 -5
  235. data/db/migrate/20120405080742_change_further_subscribed_users_to_set.rb +5 -5
  236. data/db/migrate/20120406082136_create_groups.rb +1 -1
  237. data/db/migrate/20120510025219_add_not_null_constraints_for_timestamp_columns.rb +2 -1
  238. data/db/migrate/20120528102124_increase_length_of_version_events.rb +2 -2
  239. data/db/migrate/20121003063155_add_settings_to_custom_fields.rb +1 -1
  240. data/db/migrate/20121221033947_fix_country_mapping.rb +0 -1
  241. data/db/migrate/20131207033244_add_user_id_to_lists.rb +1 -1
  242. data/db/migrate/20141126031837_increase_email_to254_chars.rb +14 -14
  243. data/db/migrate/20141230021159_add_transaction_id_column_to_versions.rb +11 -0
  244. data/db/migrate/20141230205453_add_missing_unique_indices.acts_as_taggable_on_engine.rb +20 -0
  245. data/db/migrate/20141230205454_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +15 -0
  246. data/db/migrate/20141230205455_add_missing_taggable_index.acts_as_taggable_on_engine.rb +10 -0
  247. data/db/migrate/20150123060900_convert_radio_to_radio_buttons.rb +10 -0
  248. data/db/migrate/20150227123054_remove_last_request_at_from_users.rb +5 -0
  249. data/db/migrate/20150427131956_create_index_related_type.rb +9 -0
  250. data/db/migrate/20160511053730_add_account_contacts_index.rb +5 -0
  251. data/db/schema.rb +236 -228
  252. data/db/seeds.rb +1 -2
  253. data/db/seeds/fields.rb +36 -37
  254. data/{fig.yml → docker-compose.yml} +0 -0
  255. data/fat_free_crm.gemspec +31 -18
  256. data/lib/development_tasks/license.rake +29 -29
  257. data/lib/fat_free_crm.rb +1 -5
  258. data/lib/fat_free_crm/callback.rb +28 -20
  259. data/lib/fat_free_crm/comment_extensions.rb +1 -1
  260. data/lib/fat_free_crm/core_ext.rb +1 -1
  261. data/lib/fat_free_crm/core_ext/nil.rb +0 -3
  262. data/lib/fat_free_crm/core_ext/string.rb +7 -21
  263. data/lib/fat_free_crm/custom_fields.rb +2 -2
  264. data/lib/fat_free_crm/engine.rb +14 -0
  265. data/lib/fat_free_crm/errors.rb +0 -2
  266. data/lib/fat_free_crm/exceptions.rb +3 -4
  267. data/lib/fat_free_crm/export_csv.rb +0 -2
  268. data/lib/fat_free_crm/exportable.rb +5 -7
  269. data/lib/fat_free_crm/fields.rb +7 -8
  270. data/lib/fat_free_crm/gem_dependencies.rb +4 -1
  271. data/lib/fat_free_crm/gem_ext/active_record/schema_dumper.rb +2 -2
  272. data/lib/fat_free_crm/gem_ext/active_support/buffered_logger.rb +0 -3
  273. data/lib/fat_free_crm/gem_ext/rails/engine.rb +5 -12
  274. data/lib/fat_free_crm/gem_ext/rake/task.rb +1 -1
  275. data/lib/fat_free_crm/gem_ext/simple_form/action_view_extensions/form_helper.rb +1 -2
  276. data/lib/fat_free_crm/i18n.rb +2 -3
  277. data/lib/fat_free_crm/load_settings.rb +0 -2
  278. data/lib/fat_free_crm/mail_processor/base.rb +15 -16
  279. data/lib/fat_free_crm/mail_processor/comment_replies.rb +5 -10
  280. data/lib/fat_free_crm/mail_processor/dropbox.rb +56 -59
  281. data/lib/fat_free_crm/permissions.rb +18 -15
  282. data/lib/fat_free_crm/renderers.rb +2 -2
  283. data/lib/fat_free_crm/secret_token_generator.rb +3 -9
  284. data/lib/fat_free_crm/sortable.rb +4 -8
  285. data/lib/fat_free_crm/version.rb +2 -2
  286. data/lib/fat_free_crm/view_factory.rb +3 -8
  287. data/lib/gravatar_image_tag.rb +19 -24
  288. data/lib/missing_translation_detector.rb +10 -10
  289. data/lib/tasks/ffcrm/comment_replies.rake +3 -5
  290. data/lib/tasks/ffcrm/config.rake +3 -5
  291. data/lib/tasks/ffcrm/demo.rake +14 -16
  292. data/lib/tasks/ffcrm/dropbox.rake +3 -5
  293. data/lib/tasks/ffcrm/missing_translations.rake +1 -1
  294. data/lib/tasks/ffcrm/secret.rake +1 -3
  295. data/lib/tasks/ffcrm/settings.rake +2 -4
  296. data/lib/tasks/ffcrm/setup.rake +3 -6
  297. data/lib/tasks/ffcrm/update_data.rake +110 -116
  298. data/spec/controllers/admin/groups_controller_spec.rb +0 -1
  299. data/spec/controllers/admin/users_controller_spec.rb +98 -102
  300. data/spec/controllers/applications_controller_spec.rb +17 -21
  301. data/spec/controllers/authentications_controller_spec.rb +57 -61
  302. data/spec/controllers/comments_controller_spec.rb +32 -39
  303. data/spec/controllers/emails_controller_spec.rb +6 -7
  304. data/spec/controllers/entities/accounts_controller_spec.rb +204 -214
  305. data/spec/controllers/entities/campaigns_controller_spec.rb +210 -224
  306. data/spec/controllers/entities/contacts_controller_spec.rb +250 -270
  307. data/spec/controllers/entities/leads_controller_spec.rb +415 -438
  308. data/spec/controllers/entities/opportunities_controller_spec.rb +344 -359
  309. data/spec/controllers/entities_controller_spec.rb +10 -14
  310. data/spec/controllers/home_controller_spec.rb +85 -92
  311. data/spec/controllers/lists_controller_spec.rb +0 -1
  312. data/spec/controllers/passwords_controller_spec.rb +5 -9
  313. data/spec/controllers/tasks_controller_spec.rb +193 -210
  314. data/spec/controllers/users_controller_spec.rb +137 -146
  315. data/spec/factories/account_factories.rb +11 -13
  316. data/spec/factories/campaign_factories.rb +6 -6
  317. data/spec/factories/contact_factories.rb +21 -22
  318. data/spec/factories/field_factories.rb +8 -10
  319. data/spec/factories/lead_factories.rb +16 -16
  320. data/spec/factories/list_factories.rb +2 -2
  321. data/spec/factories/opportunity_factories.rb +8 -10
  322. data/spec/factories/sequences.rb +8 -9
  323. data/spec/factories/setting_factories.rb +2 -2
  324. data/spec/factories/shared_factories.rb +26 -30
  325. data/spec/factories/tag_factories.rb +1 -1
  326. data/spec/factories/task_factories.rb +11 -11
  327. data/spec/factories/user_factories.rb +22 -27
  328. data/spec/features/acceptance_helper.rb +1 -1
  329. data/spec/features/accounts_spec.rb +65 -61
  330. data/spec/features/admin/groups_spec.rb +11 -12
  331. data/spec/features/admin/users_spec.rb +17 -19
  332. data/spec/features/campaigns_spec.rb +61 -57
  333. data/spec/features/contacts_spec.rb +90 -59
  334. data/spec/features/dashboard_spec.rb +20 -21
  335. data/spec/features/leads_spec.rb +88 -67
  336. data/spec/features/opportunities_overview_spec.rb +31 -31
  337. data/spec/features/opportunities_spec.rb +64 -60
  338. data/spec/features/support/browser.rb +2 -2
  339. data/spec/features/support/headless.rb +1 -1
  340. data/spec/features/support/helpers.rb +5 -6
  341. data/spec/features/support/paths.rb +1 -2
  342. data/spec/features/support/selector_helpers.rb +2 -2
  343. data/spec/features/tasks_spec.rb +60 -54
  344. data/spec/helpers/accounts_helper_spec.rb +2 -5
  345. data/spec/helpers/admin/field_groups_helper_spec.rb +4 -4
  346. data/spec/helpers/admin/plugins_helper_spec.rb +0 -1
  347. data/spec/helpers/admin/settings_helper_spec.rb +0 -1
  348. data/spec/helpers/admin/users_helper_spec.rb +0 -1
  349. data/spec/helpers/application_helper_spec.rb +30 -33
  350. data/spec/helpers/authentications_helper_spec.rb +2 -5
  351. data/spec/helpers/campaigns_helper_spec.rb +2 -5
  352. data/spec/helpers/comments_helper_spec.rb +2 -5
  353. data/spec/helpers/contacts_helper_spec.rb +2 -5
  354. data/spec/helpers/emails_helper_spec.rb +0 -1
  355. data/spec/helpers/fields_helper_spec.rb +0 -1
  356. data/spec/helpers/groups_helper_spec.rb +0 -1
  357. data/spec/helpers/home_helper_spec.rb +2 -5
  358. data/spec/helpers/leads_helper_spec.rb +2 -5
  359. data/spec/helpers/lists_helper_spec.rb +0 -1
  360. data/spec/helpers/opportunities_helper_spec.rb +2 -5
  361. data/spec/helpers/passwords_helper_spec.rb +2 -5
  362. data/spec/helpers/tasks_helper_spec.rb +1 -5
  363. data/spec/helpers/users_helper_spec.rb +9 -11
  364. data/spec/lib/comment_extensions_spec.rb +3 -3
  365. data/spec/lib/core_ext/string_spec.rb +1 -1
  366. data/spec/lib/errors_spec.rb +10 -10
  367. data/spec/lib/fields_spec.rb +23 -33
  368. data/spec/lib/mail_processor/base_spec.rb +41 -43
  369. data/spec/lib/mail_processor/comment_replies_spec.rb +17 -17
  370. data/spec/lib/mail_processor/dropbox_spec.rb +91 -95
  371. data/spec/lib/mail_processor/sample_emails/dropbox.rb +13 -14
  372. data/spec/lib/permissions_spec.rb +44 -47
  373. data/spec/lib/secret_token_generator_spec.rb +16 -28
  374. data/spec/lib/view_factory_spec.rb +18 -24
  375. data/spec/mailers/subscription_mailer_spec.rb +14 -16
  376. data/spec/mailers/user_mailer_spec.rb +33 -34
  377. data/spec/models/entities/account_contact_spec.rb +2 -3
  378. data/spec/models/entities/account_opportunity_spec.rb +2 -3
  379. data/spec/models/entities/account_spec.rb +52 -59
  380. data/spec/models/entities/campaign_spec.rb +32 -39
  381. data/spec/models/entities/contact_opportunity_spec.rb +2 -3
  382. data/spec/models/entities/contact_spec.rb +71 -72
  383. data/spec/models/entities/lead_spec.rb +15 -22
  384. data/spec/models/entities/opportunity_spec.rb +104 -103
  385. data/spec/models/fields/custom_field_date_pair_spec.rb +38 -44
  386. data/spec/models/fields/custom_field_pair_spec.rb +28 -36
  387. data/spec/models/fields/custom_field_spec.rb +50 -56
  388. data/spec/models/fields/field_group_spec.rb +1 -2
  389. data/spec/models/fields/field_spec.rb +13 -15
  390. data/spec/models/list_spec.rb +4 -4
  391. data/spec/models/observers/entity_observer_spec.rb +18 -21
  392. data/spec/models/polymorphic/address_spec.rb +1 -3
  393. data/spec/models/polymorphic/avatar_spec.rb +6 -8
  394. data/spec/models/polymorphic/comment_spec.rb +7 -9
  395. data/spec/models/polymorphic/email_spec.rb +1 -2
  396. data/spec/models/polymorphic/task_spec.rb +130 -142
  397. data/spec/models/polymorphic/version_spec.rb +84 -91
  398. data/spec/models/setting_spec.rb +17 -19
  399. data/spec/models/users/abilities/user_ability_spec.rb +25 -20
  400. data/spec/models/users/authentication_spec.rb +0 -1
  401. data/spec/models/users/group_spec.rb +0 -1
  402. data/spec/models/users/permission_spec.rb +12 -13
  403. data/spec/models/users/preference_spec.rb +15 -15
  404. data/spec/models/users/user_spec.rb +53 -55
  405. data/spec/routing/accounts_routing_spec.rb +12 -14
  406. data/spec/routing/admin/users_routing_spec.rb +7 -9
  407. data/spec/routing/campaigns_routing_spec.rb +13 -14
  408. data/spec/routing/comments_routing_spec.rb +5 -6
  409. data/spec/routing/contacts_routing_spec.rb +12 -14
  410. data/spec/routing/emails_routing_spec.rb +7 -8
  411. data/spec/routing/leads_routing_spec.rb +19 -21
  412. data/spec/routing/opportunities_routing_spec.rb +13 -15
  413. data/spec/routing/tasks_routing_spec.rb +14 -15
  414. data/spec/routing/users_routing_spec.rb +18 -19
  415. data/spec/shared/controllers.rb +35 -35
  416. data/spec/shared/models.rb +52 -55
  417. data/spec/spec_helper.rb +21 -42
  418. data/spec/support/assert_select.rb +19 -18
  419. data/spec/support/auth_macros.rb +3 -3
  420. data/spec/support/macros.rb +5 -6
  421. data/spec/support/mail_processor_mocks.rb +11 -11
  422. data/spec/views/accounts/_edit.haml_spec.rb +9 -9
  423. data/spec/views/accounts/_new.haml_spec.rb +8 -9
  424. data/spec/views/accounts/create.js.haml_spec.rb +11 -12
  425. data/spec/views/accounts/destroy.js.haml_spec.rb +6 -7
  426. data/spec/views/accounts/edit.js.haml_spec.rb +12 -13
  427. data/spec/views/accounts/index.haml_spec.rb +8 -8
  428. data/spec/views/accounts/index.js.haml_spec.rb +7 -8
  429. data/spec/views/accounts/new.js.haml_spec.rb +7 -8
  430. data/spec/views/accounts/show.haml_spec.rb +11 -12
  431. data/spec/views/accounts/update.js.haml_spec.rb +18 -18
  432. data/spec/views/admin/field_groups/create.js.haml_spec.rb +8 -10
  433. data/spec/views/admin/field_groups/destroy.js.haml_spec.rb +7 -9
  434. data/spec/views/admin/field_groups/edit.js.haml_spec.rb +5 -7
  435. data/spec/views/admin/field_groups/new.js.haml_spec.rb +6 -8
  436. data/spec/views/admin/field_groups/update.js.haml_spec.rb +7 -9
  437. data/spec/views/admin/users/_create.haml_spec.rb +4 -4
  438. data/spec/views/admin/users/create.js.haml_spec.rb +8 -9
  439. data/spec/views/admin/users/destroy.js.haml_spec.rb +6 -6
  440. data/spec/views/admin/users/edit.js.haml_spec.rb +7 -9
  441. data/spec/views/admin/users/index.haml_spec.rb +4 -5
  442. data/spec/views/admin/users/index.js.haml_spec.rb +6 -8
  443. data/spec/views/admin/users/new.js.haml_spec.rb +4 -6
  444. data/spec/views/admin/users/reactivate.js.haml_spec.rb +4 -4
  445. data/spec/views/admin/users/show.haml_spec.rb +0 -1
  446. data/spec/views/admin/users/suspend.js.haml_spec.rb +4 -4
  447. data/spec/views/admin/users/update.js.haml_spec.rb +6 -7
  448. data/spec/views/application/auto_complete.haml_spec.rb +12 -14
  449. data/spec/views/authentications/new.haml_spec.rb +6 -7
  450. data/spec/views/campaigns/_edit.haml_spec.rb +9 -9
  451. data/spec/views/campaigns/_new.haml_spec.rb +8 -8
  452. data/spec/views/campaigns/create.js.haml_spec.rb +11 -12
  453. data/spec/views/campaigns/destroy.js.haml_spec.rb +7 -8
  454. data/spec/views/campaigns/edit.js.haml_spec.rb +12 -20
  455. data/spec/views/campaigns/index.haml_spec.rb +6 -7
  456. data/spec/views/campaigns/index.js.haml_spec.rb +9 -10
  457. data/spec/views/campaigns/new.js.haml_spec.rb +7 -8
  458. data/spec/views/campaigns/show.haml_spec.rb +12 -13
  459. data/spec/views/campaigns/update.js.haml_spec.rb +16 -16
  460. data/spec/views/comments/edit.js.haml_spec.rb +7 -7
  461. data/spec/views/contacts/_edit.haml_spec.rb +21 -21
  462. data/spec/views/contacts/_new.haml_spec.rb +12 -13
  463. data/spec/views/contacts/create.js.haml_spec.rb +12 -13
  464. data/spec/views/contacts/destroy.js.haml_spec.rb +6 -7
  465. data/spec/views/contacts/edit.js.haml_spec.rb +15 -17
  466. data/spec/views/contacts/index.haml_spec.rb +6 -7
  467. data/spec/views/contacts/index.js.html_spec.rb +7 -8
  468. data/spec/views/contacts/new.js.haml_spec.rb +8 -9
  469. data/spec/views/contacts/show.haml_spec.rb +9 -10
  470. data/spec/views/contacts/update.js.haml_spec.rb +26 -26
  471. data/spec/views/home/index.haml_spec.rb +4 -5
  472. data/spec/views/home/index.js.haml_spec.rb +6 -7
  473. data/spec/views/home/options.js.haml_spec.rb +10 -10
  474. data/spec/views/leads/_convert.haml_spec.rb +5 -6
  475. data/spec/views/leads/_edit.haml_spec.rb +13 -13
  476. data/spec/views/leads/_new.haml_spec.rb +11 -11
  477. data/spec/views/leads/_sidebar_show.haml_spec.rb +9 -9
  478. data/spec/views/leads/convert.js.haml_spec.rb +16 -17
  479. data/spec/views/leads/create.js.haml_spec.rb +16 -17
  480. data/spec/views/leads/destroy.js.haml_spec.rb +10 -11
  481. data/spec/views/leads/edit.js.haml_spec.rb +16 -17
  482. data/spec/views/leads/index.haml_spec.rb +7 -8
  483. data/spec/views/leads/index.js.haml_spec.rb +10 -11
  484. data/spec/views/leads/new.js.haml_spec.rb +8 -9
  485. data/spec/views/leads/promote.js.haml_spec.rb +30 -31
  486. data/spec/views/leads/reject.js.haml_spec.rb +10 -11
  487. data/spec/views/leads/show.haml_spec.rb +7 -8
  488. data/spec/views/leads/update.js.haml_spec.rb +28 -29
  489. data/spec/views/opportunities/_edit.haml_spec.rb +19 -19
  490. data/spec/views/opportunities/_new.haml_spec.rb +10 -10
  491. data/spec/views/opportunities/create.js.haml_spec.rb +19 -20
  492. data/spec/views/opportunities/destroy.js.haml_spec.rb +14 -15
  493. data/spec/views/opportunities/edit.js.haml_spec.rb +14 -16
  494. data/spec/views/opportunities/index.haml_spec.rb +6 -7
  495. data/spec/views/opportunities/index.js.haml_spec.rb +7 -8
  496. data/spec/views/opportunities/new.js.haml_spec.rb +8 -9
  497. data/spec/views/opportunities/show.haml_spec.rb +9 -10
  498. data/spec/views/opportunities/update.js.haml_spec.rb +35 -35
  499. data/spec/views/tasks/_edit.haml_spec.rb +9 -9
  500. data/spec/views/tasks/complete.js.haml_spec.rb +11 -12
  501. data/spec/views/tasks/create.js.haml_spec.rb +29 -31
  502. data/spec/views/tasks/destroy.js.haml_spec.rb +8 -8
  503. data/spec/views/tasks/edit.js.haml_spec.rb +12 -15
  504. data/spec/views/tasks/index.haml_spec.rb +7 -7
  505. data/spec/views/tasks/new.js.haml_spec.rb +7 -8
  506. data/spec/views/tasks/uncomplete.js.haml_spec.rb +6 -6
  507. data/spec/views/tasks/update.js.haml_spec.rb +41 -44
  508. data/spec/views/users/avatar.js.haml_spec.rb +7 -8
  509. data/spec/views/users/change_password.js.haml_spec.rb +9 -10
  510. data/spec/views/users/edit.js.haml_spec.rb +7 -8
  511. data/spec/views/users/password.js.haml_spec.rb +8 -9
  512. data/spec/views/users/update.js.haml_spec.rb +6 -7
  513. data/spec/views/users/upload_avatar.js.haml_spec.rb +9 -9
  514. data/vendor/assets/javascripts/jquery_timeago/index.js +2 -0
  515. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.es-CL.js +18 -0
  516. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.nl.js +20 -0
  517. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-es-CL.js +20 -0
  518. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-es-CL.js +23 -0
  519. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-nl.js +21 -0
  520. data/vendor/assets/stylesheets/{jquery-ui.custom.css → jquery-ui.custom.scss} +52 -51
  521. data/vendor/gems/globby-0.1.2/LICENSE.txt +20 -0
  522. data/vendor/gems/globby-0.1.2/README.md +65 -0
  523. data/vendor/gems/globby-0.1.2/Rakefile +9 -0
  524. data/vendor/gems/globby-0.1.2/lib/globby.rb +47 -0
  525. data/vendor/gems/globby-0.1.2/lib/globby/glob.rb +90 -0
  526. data/vendor/gems/globby-0.1.2/lib/globby/globject.rb +18 -0
  527. data/vendor/gems/globby-0.1.2/lib/globby/result.rb +20 -0
  528. data/vendor/gems/globby-0.1.2/spec/gitignore_spec.rb +109 -0
  529. data/vendor/gems/globby-0.1.2/spec/globby_spec.rb +93 -0
  530. metadata +177 -55
  531. data/Gemfile.ci +0 -13
  532. data/config/initializers/sass.rb +0 -18
  533. data/lib/country_select.rb +0 -570
  534. data/lib/fat_free_crm/plugin.rb +0 -94
@@ -5,4 +5,3 @@
5
5
  #------------------------------------------------------------------------------
6
6
  module AuthenticationsHelper
7
7
  end
8
-
@@ -4,7 +4,6 @@
4
4
  # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  module CampaignsHelper
7
-
8
7
  # Sidebar checkbox control for filtering campaigns by status.
9
8
  #----------------------------------------------------------------------------
10
9
  def campaign_status_checkbox(status, count)
@@ -16,10 +15,10 @@ module CampaignsHelper
16
15
  if target.to_i > 0 && actual.to_i > 0
17
16
  if target > actual
18
17
  n = 100 - actual * 100 / target
19
- html = content_tag(:span, "(-#{number_to_percentage(n, :precision => 1)})", :class => "warn")
18
+ html = content_tag(:span, "(-#{number_to_percentage(n, precision: 1)})", class: "warn")
20
19
  else
21
20
  n = actual * 100 / target - 100
22
- html = content_tag(:span, "(+#{number_to_percentage(n, :precision => 1)})", :class => "cool")
21
+ html = content_tag(:span, "(+#{number_to_percentage(n, precision: 1)})", class: "cool")
23
22
  end
24
23
  end
25
24
  html || ""
@@ -28,9 +27,8 @@ module CampaignsHelper
28
27
  # Quick campaign summary for RSS/ATOM feeds.
29
28
  #----------------------------------------------------------------------------
30
29
  def campaign_summary(campaign)
31
- status = render :file => "campaigns/_status.html.haml", :locals => { :campaign => campaign }
32
- metrics = render :file => "campaigns/_metrics.html.haml", :locals => { :campaign => campaign }
33
- "#{t(campaign.status)}, " << [ status, metrics ].map { |str| strip_tags(str) }.join(' ').gsub("\n", '')
30
+ status = render file: "campaigns/_status.html.haml", locals: { campaign: campaign }
31
+ metrics = render file: "campaigns/_metrics.html.haml", locals: { campaign: campaign }
32
+ "#{t(campaign.status)}, " << [status, metrics].map { |str| strip_tags(str) }.join(' ').gsub("\n", '')
34
33
  end
35
-
36
34
  end
@@ -4,7 +4,6 @@
4
4
  # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  module CommentsHelper
7
-
8
7
  def notification_emails_configured?
9
8
  config = Setting.email_comment_replies || {}
10
9
  config[:server].present? && config[:user].present? && config[:password].present?
@@ -19,4 +19,3 @@ module ContactsHelper
19
19
  summary.join(', ')
20
20
  end
21
21
  end
22
-
@@ -6,33 +6,33 @@
6
6
  module HomeHelper
7
7
  def sort_by_assets
8
8
  Version::ASSETS.map do |asset|
9
- %Q[{ name: "#{t(asset.singularize)}", on_select: function() { #{redraw(:asset, [ asset, t(asset.singularize).downcase ], url_for(:action => :redraw))} } }]
9
+ %[{ name: "#{t(asset.singularize)}", on_select: function() { #{redraw(:asset, [asset, t(asset.singularize).downcase], url_for(action: :redraw))} } }]
10
10
  end
11
11
  end
12
12
 
13
13
  #----------------------------------------------------------------------------
14
14
  def sort_by_events
15
15
  Version::EVENTS.map do |event|
16
- %Q[{ name: "#{t(event + '_past_participle')}", on_select: function() { #{redraw(:event, [ event, t(event + '_past_participle').downcase ], url_for(:action => :redraw))} } }]
16
+ %[{ name: "#{t(event + '_past_participle')}", on_select: function() { #{redraw(:event, [event, t(event + '_past_participle').downcase], url_for(action: :redraw))} } }]
17
17
  end
18
18
  end
19
19
 
20
20
  #----------------------------------------------------------------------------
21
21
  def sort_by_duration
22
22
  Version::DURATION.map do |duration|
23
- %Q[{ name: "#{t(duration)}", on_select: function() { #{redraw(:duration, [ duration, t(duration).downcase ], url_for(:action => :redraw))} } }]
23
+ %[{ name: "#{t(duration)}", on_select: function() { #{redraw(:duration, [duration, t(duration).downcase], url_for(action: :redraw))} } }]
24
24
  end
25
25
  end
26
26
 
27
27
  #----------------------------------------------------------------------------
28
28
  def sort_by_users
29
- users = [[ "all_users", t(:option_all_users) ]] + @all_users.map do |user|
29
+ users = [["all_users", t(:option_all_users)]] + @all_users.map do |user|
30
30
  escaped = sanitize(user.full_name)
31
- [ escaped, escaped ]
31
+ [escaped, escaped]
32
32
  end
33
33
 
34
34
  users.map do |key, value|
35
- %Q[{ name: "#{value}", on_select: function() { #{redraw(:user, [ key, (value == t(:option_all_users) ? value.downcase : value) ], url_for(:action => :redraw))} } }]
35
+ %[{ name: "#{value}", on_select: function() { #{redraw(:user, [key, (value == t(:option_all_users) ? value.downcase : value)], url_for(action: :redraw))} } }]
36
36
  end
37
37
  end
38
38
 
@@ -43,14 +43,14 @@ module HomeHelper
43
43
  action = t('action_' + activity.event)
44
44
  type = t('subject_' + activity.item_type.downcase)
45
45
  subject = if item = activity.item
46
- if item.respond_to?(:full_name)
47
- item.full_name
48
- elsif item.respond_to?(:name)
49
- item.name
50
- end
46
+ if item.respond_to?(:full_name)
47
+ item.full_name
48
+ elsif item.respond_to?(:name)
49
+ item.name
50
+ end
51
51
  end
52
- t(:activity_text, :user => user, :action => action, :type => type, :subject => subject,
53
- :default => "#{user} #{action} #{type} #{subject}")
52
+ t(:activity_text, user: user, action: action, type: type, subject: subject,
53
+ default: "#{user} #{action} #{type} #{subject}")
54
54
  end
55
55
 
56
56
  # Displays 'not showing' message for a given count, entity and limit
@@ -59,7 +59,7 @@ module HomeHelper
59
59
  hidden_count = count - 10
60
60
  entity_string = I18n.t("#{hidden_count == 1 ? entity : entity.pluralize}_small")
61
61
  content_tag(:p) do
62
- t(:not_showing_hidden_entities, :entity => entity_string, :count => hidden_count)
62
+ t(:not_showing_hidden_entities, entity: entity_string, count: hidden_count)
63
63
  end
64
64
  end
65
65
  end
@@ -0,0 +1,30 @@
1
+ # Copied from prototype-rails which is no longer maintained
2
+
3
+ module JavascriptHelper
4
+ # link_to_function("Show me more", nil, :id => "more_link") do |page|
5
+ # page[:details].visual_effect :toggle_blind
6
+ # page[:more_link].replace_html "Show me less"
7
+ # end
8
+ # Produces:
9
+ # <a href="#" id="more_link" onclick="try {
10
+ # $(&quot;details&quot;).visualEffect(&quot;toggle_blind&quot;);
11
+ # $(&quot;more_link&quot;).update(&quot;Show me less&quot;);
12
+ # }
13
+ # catch (e) {
14
+ # alert('RJS error:\n\n' + e.toString());
15
+ # alert('$(\&quot;details\&quot;).visualEffect(\&quot;toggle_blind\&quot;);
16
+ # \n$(\&quot;more_link\&quot;).update(\&quot;Show me less\&quot;);');
17
+ # throw e
18
+ # };
19
+ # return false;">Show me more</a>
20
+ #
21
+ def link_to_function(name, *args, &block)
22
+ html_options = args.extract_options!.symbolize_keys
23
+
24
+ function = block_given? ? update_page(&block) : args[0] || ''
25
+ onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;"
26
+ href = html_options[:href] || '#'
27
+
28
+ content_tag(:a, name, html_options.merge(href: href, onclick: onclick))
29
+ end
30
+ end
@@ -10,27 +10,27 @@ module LeadsHelper
10
10
  def stars_for(lead)
11
11
  star = '&#9733;'
12
12
  rating = lead.rating || 0
13
- (star * rating).html_safe + content_tag(:font, (star * (RATING_STARS - rating)).html_safe, :color => 'gainsboro')
13
+ (star * rating).html_safe + content_tag(:font, (star * (RATING_STARS - rating)).html_safe, color: 'gainsboro')
14
14
  end
15
15
 
16
16
  #----------------------------------------------------------------------------
17
17
  def link_to_convert(lead)
18
18
  link_to(t(:convert), convert_lead_path(lead),
19
- :method => :get,
20
- :with => "{ previous: crm.find_form('edit_lead') }",
21
- :remote => true
19
+ method: :get,
20
+ with: "{ previous: crm.find_form('edit_lead') }",
21
+ remote: true
22
22
  )
23
23
  end
24
24
 
25
25
  #----------------------------------------------------------------------------
26
26
  def link_to_reject(lead)
27
- link_to(t(:reject) + "!", reject_lead_path(lead), :method => :put, :remote => true)
27
+ link_to(t(:reject) + "!", reject_lead_path(lead), method: :put, remote: true)
28
28
  end
29
29
 
30
30
  #----------------------------------------------------------------------------
31
31
  def confirm_reject(lead)
32
32
  question = %(<span class="warn">#{t(:reject_lead_confirm)}</span>)
33
- yes = link_to(t(:yes_button), reject_lead_path(lead), :method => :put)
33
+ yes = link_to(t(:yes_button), reject_lead_path(lead), method: :put)
34
34
  no = link_to_function(t(:no_button), "$('#menu').html($('#confirm').html());")
35
35
  text = "$('#confirm').html( $('#menu').html() );\n"
36
36
  text << "$('#menu').html('#{question} #{yes} : #{no}');"
@@ -71,7 +71,7 @@ module LeadsHelper
71
71
  summary << (lead.status ? t(lead.status) : t(:other))
72
72
 
73
73
  if lead.company? && lead.title?
74
- summary << t(:works_at, :job_title => lead.title, :company => lead.company)
74
+ summary << t(:works_at, job_title: lead.title, company: lead.company)
75
75
  else
76
76
  summary << lead.company if lead.company?
77
77
  summary << lead.title if lead.title?
@@ -4,7 +4,6 @@
4
4
  # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  module OpportunitiesHelper
7
-
8
7
  # Sidebar checkbox control for filtering opportunities by stage.
9
8
  #----------------------------------------------------------------------------
10
9
  def opportunity_stage_checkbox(stage, count)
@@ -16,15 +15,15 @@ module OpportunitiesHelper
16
15
  def opportunity_summary(opportunity)
17
16
  summary, amount = [], []
18
17
  summary << (opportunity.stage ? t(opportunity.stage) : t(:other))
19
- summary << number_to_currency(opportunity.weighted_amount, :precision => 0)
18
+ summary << number_to_currency(opportunity.weighted_amount, precision: 0)
20
19
  unless %w(won lost).include?(opportunity.stage)
21
- amount << number_to_currency(opportunity.amount || 0, :precision => 0)
22
- amount << (opportunity.discount ? t(:discount_number, number_to_currency(opportunity.discount, :precision => 0)) : t(:no_discount))
20
+ amount << number_to_currency(opportunity.amount || 0, precision: 0)
21
+ amount << (opportunity.discount ? t(:discount_number, number_to_currency(opportunity.discount, precision: 0)) : t(:no_discount))
23
22
  amount << t(:probability_number, (opportunity.probability || 0).to_s + '%')
24
23
  summary << amount.join(' ')
25
24
  end
26
25
  if opportunity.closes_on
27
- summary << t(:closing_date, l(opportunity.closes_on, :format => :mmddyy))
26
+ summary << t(:closing_date, l(opportunity.closes_on, format: :mmddyy))
28
27
  else
29
28
  summary << t(:no_closing_date)
30
29
  end
@@ -39,10 +38,9 @@ module OpportunitiesHelper
39
38
  selected_campaign = Campaign.find_by_id(options[:selected])
40
39
  campaigns = ([selected_campaign] + Campaign.my.order(:name).limit(25)).compact.uniq
41
40
  collection_select :opportunity, :campaign_id, campaigns, :id, :name, options,
42
- {:"data-placeholder" => t(:select_a_campaign),
43
- :"data-url" => auto_complete_campaigns_path(format: 'json'),
44
- :style => "width:330px; display:none;",
45
- :class => 'ajax_chosen' }
41
+ :"data-placeholder" => t(:select_a_campaign),
42
+ :"data-url" => auto_complete_campaigns_path(format: 'json'),
43
+ style: "width:330px; display:none;",
44
+ class: 'ajax_chosen'
46
45
  end
47
-
48
46
  end
@@ -5,4 +5,3 @@
5
5
  #------------------------------------------------------------------------------
6
6
  module PasswordsHelper
7
7
  end
8
-
@@ -4,7 +4,6 @@
4
4
  # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  module TagsHelper
7
-
8
7
  # Generate tag links for use on asset index pages.
9
8
  #----------------------------------------------------------------------------
10
9
  def tags_for_index(model)
@@ -16,7 +15,7 @@ module TagsHelper
16
15
  elsif !query.include?(hashtag)
17
16
  query += " #{hashtag}"
18
17
  end
19
- out << link_to_function(tag, "crm.search_tagged('#{query}', '#{model.class.to_s.tableize}')", :title => tag)
18
+ out << link_to_function(tag, "crm.search_tagged('#{query}', '#{model.class.to_s.tableize}')", title: tag)
20
19
  end
21
20
  end
22
21
 
@@ -27,5 +26,4 @@ module TagsHelper
27
26
  end
28
27
  end
29
28
  end
30
-
31
29
  end
@@ -4,21 +4,20 @@
4
4
  # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  module TasksHelper
7
-
8
7
  # Sidebar checkbox control for filtering tasks by due date -- used for
9
8
  # pending and assigned views only.
10
9
  #----------------------------------------------------------------------------
11
10
  def task_filter_checkbox(view, filter, count)
12
11
  name = "filter_by_task_#{view}"
13
12
  checked = (session[name] ? session[name].split(",").include?(filter.to_s) : count > 0)
14
- url = url_for(:action => :filter, :view => view)
15
- onclick = %Q{
13
+ url = url_for(action: :filter, view: view)
14
+ onclick = %{
16
15
  $('#loading').show();
17
16
  $.post('#{url}', {filter: this.value, checked: this.checked}, function () {
18
17
  $('#loading').hide();
19
18
  });
20
19
  }
21
- check_box_tag("filters[]", filter, checked, :onclick => onclick, :id => "filters_#{filter.to_s.underscore}")
20
+ check_box_tag("filters[]", filter, checked, onclick: onclick, id: "filters_#{filter.to_s.underscore}")
22
21
  end
23
22
 
24
23
  #----------------------------------------------------------------------------
@@ -34,32 +33,32 @@ module TasksHelper
34
33
 
35
34
  #----------------------------------------------------------------------------
36
35
  def link_to_task_edit(task, bucket)
37
- link_to(t(:edit), edit_task_path(task, :bucket => bucket, :view => @view, :previous => "crm.find_form('edit_task')"),
38
- :method => :get, :remote => true)
36
+ link_to(t(:edit), edit_task_path(task, bucket: bucket, view: @view, previous: "crm.find_form('edit_task')"),
37
+ method: :get, remote: true)
39
38
  end
40
39
 
41
40
  #----------------------------------------------------------------------------
42
41
  def link_to_task_delete(task, bucket)
43
- link_to(t(:delete) + "!", task_path(task, :bucket => bucket, :view => @view),
44
- :method => :delete, :remote => true)
42
+ link_to(t(:delete) + "!", task_path(task, bucket: bucket, view: @view),
43
+ method: :delete, remote: true)
45
44
  end
46
45
 
47
46
  #----------------------------------------------------------------------------
48
47
  def link_to_task_complete(pending, bucket)
49
- onclick = %Q{$("##{dom_id(pending, :name)}").css({textDecoration: "line-through"});}
50
- onclick << %Q{$.ajax("#{complete_task_path(pending)}", {type: "PUT", data: {bucket: "#{bucket}"}});}
48
+ onclick = %{$("##{dom_id(pending, :name)}").css({textDecoration: "line-through"});}
49
+ onclick << %{$.ajax("#{complete_task_path(pending)}", {type: "PUT", data: {bucket: "#{bucket}"}});}
51
50
  end
52
51
 
53
52
  #----------------------------------------------------------------------------
54
53
  def link_to_task_uncomplete(task, bucket)
55
- link_to(t(:task_uncomplete), uncomplete_task_path(task, :bucket => bucket, :view => @view),
56
- :method => :put, :remote => true)
54
+ link_to(t(:task_uncomplete), uncomplete_task_path(task, bucket: bucket, view: @view),
55
+ method: :put, remote: true)
57
56
  end
58
57
 
59
58
  # Task summary for RSS/ATOM feed.
60
59
  #----------------------------------------------------------------------------
61
60
  def task_summary(task)
62
- summary = [ task.category.blank? ? t(:other) : t(task.category) ]
61
+ summary = [task.category.blank? ? t(:other) : t(task.category)]
63
62
  if @view != "completed"
64
63
  if @view == "pending" && task.user != current_user
65
64
  summary << t(:task_from, task.user.full_name)
@@ -68,18 +67,18 @@ module TasksHelper
68
67
  end
69
68
  summary << "#{t(:related)} #{task.asset.name} (#{task.asset_type.downcase})" if task.asset_id?
70
69
  summary << if task.bucket == "due_asap"
71
- t(:task_due_now)
72
- elsif task.bucket == "due_later"
73
- t(:task_due_later)
74
- else
75
- l(task.due_at.localtime, :format => :mmddhhss)
70
+ t(:task_due_now)
71
+ elsif task.bucket == "due_later"
72
+ t(:task_due_later)
73
+ else
74
+ l(task.due_at.localtime, format: :mmddhhss)
76
75
  end
77
76
  else # completed
78
77
  summary << "#{t(:related)} #{task.asset.name} (#{task.asset_type.downcase})" if task.asset_id?
79
78
  summary << t(:task_completed_by,
80
- :time_ago => distance_of_time_in_words(task.completed_at, Time.now),
81
- :date => l(task.completed_at.localtime, :format => :mmddhhss),
82
- :user => task.completor.full_name)
79
+ time_ago: distance_of_time_in_words(task.completed_at, Time.now),
80
+ date: l(task.completed_at.localtime, format: :mmddhhss),
81
+ user: task.completor.full_name)
83
82
  end
84
83
  summary.join(', ')
85
84
  end
@@ -94,14 +93,14 @@ module TasksHelper
94
93
  #----------------------------------------------------------------------------
95
94
  def replace_content(task, bucket = nil)
96
95
  partial = (task.assigned_to && task.assigned_to != current_user.id) ? "assigned" : "pending"
97
- html = render(:partial => "tasks/#{partial}", :collection => [ task ], :locals => { :bucket => bucket })
96
+ html = render(partial: "tasks/#{partial}", collection: [task], locals: { bucket: bucket })
98
97
  text = "$('##{dom_id(task)}').html('#{ j html }');\n".html_safe
99
98
  end
100
99
 
101
100
  #----------------------------------------------------------------------------
102
101
  def insert_content(task, bucket, view)
103
102
  text = "$('#list_#{bucket}').show();\n"
104
- html = render(:partial => view, :collection => [ task ], :locals => { :bucket => bucket })
103
+ html = render(partial: view, collection: [task], locals: { bucket: bucket })
105
104
  text << "$('##{h bucket.to_s}').prepend('#{ j html }');\n"
106
105
  text << "$('##{dom_id(task)}').effect('highlight', { duration:1500 });\n"
107
106
  text.html_safe
@@ -119,10 +118,10 @@ module TasksHelper
119
118
  text = "".html_safe
120
119
  if @view == "pending" && @task.assigned_to.present? && @task.assigned_to != current_user.id
121
120
  text << hide_task_and_possibly_bucket(task, @task_before_update.bucket)
122
- text << tasks_flash( t(:task_assigned, (h @task.assignee.try(:full_name))) + " (#{link_to(t(:view_assigned_tasks), url_for(:controller => :tasks, :view => :assigned))})" )
121
+ text << tasks_flash(t(:task_assigned, (h @task.assignee.try(:full_name))) + " (#{link_to(t(:view_assigned_tasks), url_for(controller: :tasks, view: :assigned))})")
123
122
  elsif @view == "assigned" && @task.assigned_to.blank?
124
123
  text << hide_task_and_possibly_bucket(task, @task_before_update.bucket)
125
- text << tasks_flash( t(:task_pending) + " (#{link_to(t(:view_pending_tasks), tasks_url)}.")
124
+ text << tasks_flash(t(:task_pending) + " (#{link_to(t(:view_pending_tasks), tasks_url)}.")
126
125
  else
127
126
  text << replace_content(@task, @task.bucket)
128
127
  end
@@ -137,5 +136,4 @@ module TasksHelper
137
136
  text << refresh_sidebar(:index, :filters)
138
137
  text
139
138
  end
140
-
141
139
  end
@@ -4,17 +4,16 @@
4
4
  # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  module UsersHelper
7
-
8
7
  def language_for(user)
9
8
  if user.preference[:locale]
10
- locale, language = languages.detect{ |locale, language| locale == user.preference[:locale] }
9
+ locale, language = languages.detect { |locale, _language| locale == user.preference[:locale] }
11
10
  end
12
11
  language || "English"
13
12
  end
14
13
 
15
14
  def sort_by_language
16
15
  languages.sort.map do |locale, language|
17
- %Q[{ name: "#{language}", on_select: function() { #{redraw(:locale, [ locale, language ], url_for(:action => :redraw, :id => current_user))} } }]
16
+ %[{ name: "#{language}", on_select: function() { #{redraw(:locale, [locale, language], url_for(action: :redraw, id: current_user))} } }]
18
17
  end
19
18
  end
20
19
 
@@ -25,12 +24,12 @@ module UsersHelper
25
24
  def user_select(asset, users, myself)
26
25
  user_options = user_options_for_select(users, myself)
27
26
  select(asset, :assigned_to, user_options,
28
- { :include_blank => t(:unassigned) },
29
- { :style => "width:160px",
30
- :class => 'select2' })
27
+ { include_blank: t(:unassigned) },
28
+ style: "width:160px",
29
+ class: 'select2')
31
30
  end
32
31
 
33
32
  def user_options_for_select(users, myself)
34
- (users - [myself]).map{|u| [u.full_name, u.id]}.prepend([t(:myself), myself.id])
33
+ (users - [myself]).map { |u| [u.full_name, u.id] }.prepend([t(:myself), myself.id])
35
34
  end
36
35
  end
@@ -4,11 +4,10 @@
4
4
  # See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  module VersionsHelper
7
-
8
7
  # Parse the changes for each version
9
8
  #----------------------------------------------------------------------------
10
9
  def parse_version(attr_name, change)
11
- if attr_name =~ /\Acf_/ and (field = CustomField.where(:name => attr_name).first).present?
10
+ if attr_name =~ /\Acf_/ && (field = CustomField.where(name: attr_name).first).present?
12
11
  label = field.label
13
12
  first = field.render(change.first)
14
13
  second = field.render(change.second)
@@ -20,15 +19,14 @@ module VersionsHelper
20
19
 
21
20
  # Find account and link to it.
22
21
  if attr_name == 'account_id'
23
- if first.present? and (account = Account.find_by_id(first))
22
+ if first.present? && (account = Account.find_by_id(first))
24
23
  first = link_to(h(account.name), account_path(account))
25
24
  end
26
- if second.present? and (account = Account.find_by_id(second))
25
+ if second.present? && (account = Account.find_by_id(second))
27
26
  second = link_to(h(account.name), account_path(account))
28
27
  end
29
28
  end
30
29
 
31
30
  [label, first, second]
32
31
  end
33
-
34
32
  end