flyboy 1.0.7 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +7 -0
  2. data/app/controllers/flyboy/application_controller.rb +19 -4
  3. data/app/controllers/flyboy/goals_controller.rb +3 -3
  4. data/app/controllers/flyboy/tasks_controller.rb +20 -11
  5. data/app/helpers/flyboy/application_helper.rb +2 -2
  6. data/app/models/flyboy/{ability.rb → ability_helper.rb} +7 -6
  7. data/app/models/flyboy/goal.rb +3 -4
  8. data/app/models/flyboy/task.rb +16 -13
  9. data/app/pdfs/flyboy/roadmap.rb +10 -8
  10. data/app/views/flyboy/goals/_actions.html.slim +1 -1
  11. data/app/views/flyboy/goals/_context.html.slim +3 -1
  12. data/app/views/flyboy/goals/_form.html.slim +2 -2
  13. data/app/views/flyboy/goals/_list.html.slim +6 -6
  14. data/app/views/flyboy/tasks/_context.html.slim +1 -1
  15. data/app/views/flyboy/tasks/_form.html.slim +6 -4
  16. data/app/views/flyboy/tasks/_list.html.slim +11 -11
  17. data/app/views/flyboy/tasks/index.xls.erb +7 -5
  18. data/app/views/flyboy/tasks/show.html.slim +2 -2
  19. data/config/locales/fr.yml +3 -3
  20. data/config/routes.rb +1 -4
  21. data/db/migrate/20150525081421_tasks_belongs_to_taskable.rb +7 -0
  22. data/db/migrate/20150525114120_rename_title_to_name.rb +6 -0
  23. data/lib/flyboy/engine.rb +2 -0
  24. data/lib/flyboy/version.rb +1 -1
  25. data/spec/controllers/flyboy/goals_controller_spec.rb +14 -14
  26. data/spec/controllers/flyboy/tasks_controller_spec.rb +19 -19
  27. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  28. data/spec/dummy/app/models/ability.rb +8 -0
  29. data/spec/dummy/config/routes.rb +2 -2
  30. data/spec/dummy/db/development.sqlite3 +0 -0
  31. data/spec/dummy/db/schema.rb +8 -7
  32. data/spec/dummy/db/test.sqlite3 +0 -0
  33. data/spec/dummy/log/development.log +2520 -2715
  34. data/spec/dummy/log/test.log +156405 -27474
  35. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_alerts.scssc +0 -0
  36. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_badges.scssc +0 -0
  37. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_breadcrumbs.scssc +0 -0
  38. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_button-groups.scssc +0 -0
  39. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_buttons.scssc +0 -0
  40. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_carousel.scssc +0 -0
  41. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_close.scssc +0 -0
  42. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_code.scssc +0 -0
  43. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_component-animations.scssc +0 -0
  44. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_dropdowns.scssc +0 -0
  45. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_forms.scssc +0 -0
  46. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_glyphicons.scssc +0 -0
  47. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_grid.scssc +0 -0
  48. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_input-groups.scssc +0 -0
  49. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_jumbotron.scssc +0 -0
  50. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_labels.scssc +0 -0
  51. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_list-group.scssc +0 -0
  52. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_media.scssc +0 -0
  53. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_mixins.scssc +0 -0
  54. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_modals.scssc +0 -0
  55. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_navbar.scssc +0 -0
  56. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_navs.scssc +0 -0
  57. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_normalize.scssc +0 -0
  58. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_pager.scssc +0 -0
  59. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_pagination.scssc +0 -0
  60. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_panels.scssc +0 -0
  61. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_popovers.scssc +0 -0
  62. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_print.scssc +0 -0
  63. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_progress-bars.scssc +0 -0
  64. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_responsive-embed.scssc +0 -0
  65. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_responsive-utilities.scssc +0 -0
  66. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_scaffolding.scssc +0 -0
  67. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_tables.scssc +0 -0
  68. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_thumbnails.scssc +0 -0
  69. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_tooltip.scssc +0 -0
  70. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_type.scssc +0 -0
  71. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_utilities.scssc +0 -0
  72. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_variables.scssc +0 -0
  73. data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_wells.scssc +0 -0
  74. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_alerts.scssc +0 -0
  75. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_background-variant.scssc +0 -0
  76. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_border-radius.scssc +0 -0
  77. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_buttons.scssc +0 -0
  78. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_center-block.scssc +0 -0
  79. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_clearfix.scssc +0 -0
  80. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_forms.scssc +0 -0
  81. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_gradients.scssc +0 -0
  82. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_grid-framework.scssc +0 -0
  83. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_grid.scssc +0 -0
  84. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_hide-text.scssc +0 -0
  85. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_image.scssc +0 -0
  86. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_labels.scssc +0 -0
  87. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_list-group.scssc +0 -0
  88. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_nav-divider.scssc +0 -0
  89. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_nav-vertical-align.scssc +0 -0
  90. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_opacity.scssc +0 -0
  91. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_pagination.scssc +0 -0
  92. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_panels.scssc +0 -0
  93. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_progress-bar.scssc +0 -0
  94. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_reset-filter.scssc +0 -0
  95. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_resize.scssc +0 -0
  96. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_responsive-visibility.scssc +0 -0
  97. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_size.scssc +0 -0
  98. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_tab-focus.scssc +0 -0
  99. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_table-row.scssc +0 -0
  100. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_text-emphasis.scssc +0 -0
  101. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_text-overflow.scssc +0 -0
  102. data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_vendor-prefixes.scssc +0 -0
  103. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/all.sassc +0 -0
  104. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/comments.sassc +0 -0
  105. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/contexts.sassc +0 -0
  106. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/filters.sassc +0 -0
  107. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/flash.sassc +0 -0
  108. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/forms.sassc +0 -0
  109. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/pagination.sassc +0 -0
  110. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/styles.sassc +0 -0
  111. data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/tables.sassc +0 -0
  112. data/spec/dummy/tmp/cache/assets/development/sass/e66ce83b9b8e021b9cae55d9b38367c09c2c8adf/_bootstrap-sprockets.scssc +0 -0
  113. data/spec/dummy/tmp/cache/assets/development/sass/e66ce83b9b8e021b9cae55d9b38367c09c2c8adf/_bootstrap.scssc +0 -0
  114. data/spec/dummy/tmp/cache/assets/development/sass/ec3033521a9a2a5fc1c57f6d8eef2f7ab7aea9d2/_font-awesome-sprockets.scssc +0 -0
  115. data/spec/dummy/tmp/cache/assets/development/sass/ec3033521a9a2a5fc1c57f6d8eef2f7ab7aea9d2/font-awesome.scssc +0 -0
  116. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_animated.scssc +0 -0
  117. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_bordered-pulled.scssc +0 -0
  118. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_core.scssc +0 -0
  119. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_fixed-width.scssc +0 -0
  120. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_icons.scssc +0 -0
  121. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_larger.scssc +0 -0
  122. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_list.scssc +0 -0
  123. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_mixins.scssc +0 -0
  124. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_path.scssc +0 -0
  125. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_rotated-flipped.scssc +0 -0
  126. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_stacked.scssc +0 -0
  127. data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_variables.scssc +0 -0
  128. data/spec/dummy/tmp/cache/assets/development/sprockets/02760a27d9de50c06581e7199e10b790 +0 -0
  129. data/spec/dummy/tmp/cache/assets/development/sprockets/044b2ea3e0a9d34028d0af55eadb2981 +0 -0
  130. data/spec/dummy/tmp/cache/assets/development/sprockets/0845e69fa33bf3206ebe5dda99bc9843 +0 -0
  131. data/spec/dummy/tmp/cache/assets/development/sprockets/0fb5af0feae7e56138e28bac2c7c191c +0 -0
  132. data/spec/dummy/tmp/cache/assets/development/sprockets/12ec72982ea3f253ad1c16f9d545e9cb +0 -0
  133. data/spec/dummy/tmp/cache/assets/development/sprockets/13474356756eb389416e44a0ddeff07d +0 -0
  134. data/spec/dummy/tmp/cache/assets/development/sprockets/22b68a0c021dc3a000514bd46687b656 +0 -0
  135. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  136. data/spec/dummy/tmp/cache/assets/development/sprockets/32341e29ada6a2565af1ff2a4ec82d78 +0 -0
  137. data/spec/dummy/tmp/cache/assets/development/sprockets/467be2bbae063498a5122af60e0950e9 +0 -0
  138. data/spec/dummy/tmp/cache/assets/development/sprockets/50bf11084bee4d4c5b42ad61d3fa4f80 +0 -0
  139. data/spec/dummy/tmp/cache/assets/development/sprockets/535583d5f97b123d441fcf3354c2b222 +0 -0
  140. data/spec/dummy/tmp/cache/assets/development/sprockets/591d86a67fffbda5d029424968ab5eb7 +0 -0
  141. data/spec/dummy/tmp/cache/assets/development/sprockets/5be93061694476ced3bdcc9c67390dac +0 -0
  142. data/spec/dummy/tmp/cache/assets/development/sprockets/6623ec3e3c17f248645febb398617c40 +0 -0
  143. data/spec/dummy/tmp/cache/assets/development/sprockets/676accaff438e6b271758557154e2f12 +0 -0
  144. data/spec/dummy/tmp/cache/assets/development/sprockets/69c5f29dcec0e20eca63838e1aa400c8 +0 -0
  145. data/spec/dummy/tmp/cache/assets/development/sprockets/6a861d25b6c13ce3badd1f2bf1234bb0 +0 -0
  146. data/spec/dummy/tmp/cache/assets/development/sprockets/6ab708d682277335bc93bdc02cf27153 +0 -0
  147. data/spec/dummy/tmp/cache/assets/development/sprockets/72fcd10b62e1d0077ed7097ddbdec7ec +0 -0
  148. data/spec/dummy/tmp/cache/assets/development/sprockets/74a2e2c4822266a8e24262c3b60829fb +0 -0
  149. data/spec/dummy/tmp/cache/assets/development/sprockets/74bca4da6effdf83108ce52f7e6c1d5a +0 -0
  150. data/spec/dummy/tmp/cache/assets/development/sprockets/75997b26090637a57f89e75d7ae0dfa2 +0 -0
  151. data/spec/dummy/tmp/cache/assets/development/sprockets/79edb8f3411453961d10988f14876343 +0 -0
  152. data/spec/dummy/tmp/cache/assets/development/sprockets/7de92894e194df67224196737b85b14a +0 -0
  153. data/spec/dummy/tmp/cache/assets/development/sprockets/800788cadba4d4bede74a4446a4ed9d8 +0 -0
  154. data/spec/dummy/tmp/cache/assets/development/sprockets/85aced8a467e95ac9516e2306d76d6e0 +0 -0
  155. data/spec/dummy/tmp/cache/assets/development/sprockets/85e37ca2d41ffe6bbccc02af361aad82 +0 -0
  156. data/spec/dummy/tmp/cache/assets/development/sprockets/885a64098b57fc973b4aa5186acc6382 +0 -0
  157. data/spec/dummy/tmp/cache/assets/development/sprockets/9024af0b8ef7de7d15ef074f6ba9015a +0 -0
  158. data/spec/dummy/tmp/cache/assets/development/sprockets/92c8627f9bde383f2569c95353130883 +0 -0
  159. data/spec/dummy/tmp/cache/assets/development/sprockets/9ec29c175ce464968564f1602774fe9f +0 -0
  160. data/spec/dummy/tmp/cache/assets/development/sprockets/a4155f9ef0ce1743a1a3ec66ed09e6f9 +0 -0
  161. data/spec/dummy/tmp/cache/assets/development/sprockets/a88d9c609d05fcc4670c8742b41816c0 +0 -0
  162. data/spec/dummy/tmp/cache/assets/development/sprockets/a9eb3ff8189f71e060d63c886d97ac78 +0 -0
  163. data/spec/dummy/tmp/cache/assets/development/sprockets/b227a0fdba22b9b08f4dc87e47ce1875 +0 -0
  164. data/spec/dummy/tmp/cache/assets/development/sprockets/c0f8220882fe2b96356384d1e61f511a +0 -0
  165. data/spec/dummy/tmp/cache/assets/development/sprockets/cc4177a7d907d6e97bbdf17b95ca7bb8 +0 -0
  166. data/spec/dummy/tmp/cache/assets/development/sprockets/d84d4e8670f9f920c9dd6bdda22df75a +0 -0
  167. data/spec/dummy/tmp/cache/assets/development/sprockets/d87810c66e05721ba749c5901c1af296 +0 -0
  168. data/spec/dummy/tmp/cache/assets/development/sprockets/d9304523bd34cb3dd17174f74d8e5421 +0 -0
  169. data/spec/dummy/tmp/cache/assets/development/sprockets/de73b90a586a6312cd83ece6298b514d +0 -0
  170. data/spec/dummy/tmp/cache/assets/development/sprockets/e1430951fdc18f19b3ea53e2021eff59 +0 -0
  171. data/spec/dummy/tmp/cache/assets/development/sprockets/ead4de885816c402cbc7de0c786c2b5a +0 -0
  172. data/spec/dummy/tmp/cache/assets/development/sprockets/ebbf6e34b9c86d76a2df717cb5c15080 +0 -0
  173. data/spec/dummy/tmp/cache/assets/development/sprockets/ebe08f689f659c024f467b77f32a1c49 +0 -0
  174. data/spec/dummy/tmp/cache/assets/development/sprockets/ef789f8fafa6a77f78f5cd4ce96ca310 +0 -0
  175. data/spec/dummy/tmp/cache/assets/development/sprockets/f29201f8014dd937e7e75e6e09423b0b +0 -0
  176. data/spec/dummy/tmp/cache/assets/development/sprockets/f657e5c9b0f84af1a2e801d5693f252c +0 -0
  177. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  178. data/spec/dummy/tmp/cache/assets/test/sprockets/0845e69fa33bf3206ebe5dda99bc9843 +0 -0
  179. data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  180. data/spec/dummy/tmp/cache/assets/test/sprockets/591d86a67fffbda5d029424968ab5eb7 +0 -0
  181. data/spec/dummy/tmp/cache/assets/test/sprockets/69c5f29dcec0e20eca63838e1aa400c8 +0 -0
  182. data/spec/dummy/tmp/cache/assets/test/sprockets/6a861d25b6c13ce3badd1f2bf1234bb0 +0 -0
  183. data/spec/dummy/tmp/cache/assets/test/sprockets/6ab708d682277335bc93bdc02cf27153 +0 -0
  184. data/spec/dummy/tmp/cache/assets/test/sprockets/74a2e2c4822266a8e24262c3b60829fb +0 -0
  185. data/spec/dummy/tmp/cache/assets/test/sprockets/75997b26090637a57f89e75d7ae0dfa2 +0 -0
  186. data/spec/dummy/tmp/cache/assets/test/sprockets/85aced8a467e95ac9516e2306d76d6e0 +0 -0
  187. data/spec/dummy/tmp/cache/assets/test/sprockets/a4155f9ef0ce1743a1a3ec66ed09e6f9 +0 -0
  188. data/spec/dummy/tmp/cache/assets/test/sprockets/d84d4e8670f9f920c9dd6bdda22df75a +0 -0
  189. data/spec/dummy/tmp/cache/assets/test/sprockets/ef789f8fafa6a77f78f5cd4ce96ca310 +0 -0
  190. data/spec/dummy/tmp/cache/assets/test/sprockets/f657e5c9b0f84af1a2e801d5693f252c +0 -0
  191. data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  192. data/spec/factories/flyboy_goals.rb +2 -2
  193. data/spec/factories/flyboy_tasks.rb +2 -2
  194. data/spec/helpers/flyboy/application_helper_spec.rb +6 -6
  195. data/spec/models/flyboy/ability_spec.rb +14 -6
  196. data/spec/models/flyboy/goal_spec.rb +6 -6
  197. data/spec/models/flyboy/task_spec.rb +3 -3
  198. data/spec/routes/flyboy/goals_routing_spec.rb +0 -4
  199. data/spec/routes/flyboy/tasks_routing_spec.rb +1 -1
  200. data/spec/spec_helper.rb +2 -0
  201. metadata +332 -52
  202. data/spec/dummy/tmp/pids/server.pid +0 -1
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d93bfafbdb91bb4352f71be2aeabb56dd8787e3d
4
+ data.tar.gz: cedbdd47162424e9cc12c2faa1c1ba2d23c614aa
5
+ SHA512:
6
+ metadata.gz: 84d522de31c4d217b6405823a30e90f25ea79e5c5fe878cb61822de83f13c4e1278c5832b1f7d04c4362384a91c042282423043b7aa689dced2cbca4c5e9f45f
7
+ data.tar.gz: e965d5044ef9c060bf978098e5b985c5d755954dec325421a386d445528de579827802bc6efdeada89d1e9ac5065f084a4745db25b4f768fd21acc74ba677764
@@ -1,11 +1,26 @@
1
1
  module Flyboy
2
2
  class ApplicationController < ::ApplicationController
3
- def current_ability
4
- ::Flyboy::Ability.new
5
- end
6
-
7
3
  layout "application"
8
4
 
9
5
  helper Dorsale::AllHelpers
6
+
7
+ # Cross-engine polymorphic_path
8
+ # TODO : Export to Dorsale ?
9
+ def engine_polymorphic_path(obj)
10
+ if obj.class.parent == Object
11
+ routes = main_app
12
+ else
13
+ routes = obj.class.parent::Engine.routes
14
+ end
15
+
16
+ routes.url_for(
17
+ :controller => obj.class.model_name.collection,
18
+ :action => :show,
19
+ :id => obj.to_param,
20
+ :only_path => true
21
+ )
22
+ end
23
+
24
+ helper_method :engine_polymorphic_path
10
25
  end
11
26
  end
@@ -14,7 +14,7 @@ module Flyboy
14
14
 
15
15
  @order ||= sortable_column_order do |column, direction|
16
16
  case column
17
- when "title", "status"
17
+ when "name", "status"
18
18
  %(LOWER(flyboy_goals.#{column}) #{direction})
19
19
  when "progress"
20
20
  %(flyboy_goals.#{column} #{direction})
@@ -37,7 +37,7 @@ module Flyboy
37
37
 
38
38
  @order ||= sortable_column_order do |column, direction|
39
39
  case column
40
- when "title", "status"
40
+ when "name", "status"
41
41
  %(LOWER(flyboy_tasks.#{column}) #{direction})
42
42
  when "progress", "term"
43
43
  %(flyboy_tasks.#{column} #{direction})
@@ -123,7 +123,7 @@ module Flyboy
123
123
  end
124
124
 
125
125
  def permitted_params
126
- [:title, :description]
126
+ [:name, :description]
127
127
  end
128
128
 
129
129
  def goal_params
@@ -8,17 +8,20 @@ module Flyboy
8
8
  def index
9
9
  authorize! :list, Task
10
10
 
11
- @tasks ||= Task.all
11
+ @tasks ||= Task.all.includes(:taskable)
12
12
 
13
13
  @order ||= sortable_column_order do |column, direction|
14
14
  case column
15
- when "title", "status"
15
+ when "name", "status"
16
16
  %(LOWER(flyboy_tasks.#{column}) #{direction})
17
17
  when "progress", "term"
18
18
  %(flyboy_tasks.#{column} #{direction})
19
- when "goal"
20
- @tasks = @tasks.joins(:goal)
21
- %(LOWER(flyboy_goals.title) #{direction})
19
+ when "taskable"
20
+ if direction == :asc
21
+ proc { |a, b| a.taskable.name.downcase <=> b.taskable.name.downcase }
22
+ else
23
+ proc { |a, b| b.taskable.name.downcase <=> a.taskable.name.downcase }
24
+ end
22
25
  else
23
26
  params["sort"] = "term"
24
27
  "term ASC"
@@ -27,10 +30,16 @@ module Flyboy
27
30
 
28
31
  @filters ||= SmallData::FilterForTasks.new(cookies)
29
32
 
30
- @tasks = @tasks.order(@order)
31
33
  @tasks = @filters.apply(@tasks)
32
34
  @tasks = @tasks.search(params[:q])
33
- @tasks = @tasks.page(params[:page])
35
+
36
+ if @order.is_a?(Proc)
37
+ @tasks = @tasks.sort(&@order)
38
+ @tasks = Kaminari.paginate_array(@tasks).page(params[:page])
39
+ else
40
+ @tasks = @tasks.order(@order)
41
+ @tasks = @tasks.page(params[:page])
42
+ end
34
43
 
35
44
  respond_to do |format|
36
45
  format.html
@@ -61,8 +70,8 @@ module Flyboy
61
70
  end
62
71
 
63
72
  def new
64
- @goal ||= Goal.find(params[:goal_id])
65
- @task ||= @goal.tasks.new
73
+ @task = Task.new
74
+ @task.taskable_guid = params[:taskable_guid]
66
75
 
67
76
  authorize! :create, @task
68
77
  end
@@ -141,11 +150,11 @@ module Flyboy
141
150
 
142
151
  def set_objects
143
152
  @task = Task.find params[:id]
144
- @goal = @task.goal
153
+ @taskable = @task.taskable
145
154
  end
146
155
 
147
156
  def permitted_params
148
- [:goal_id, :title, :description, :progress, :term, :reminder]
157
+ [:taskable_id, :taskable_type, :name, :description, :progress, :term, :reminder]
149
158
  end
150
159
 
151
160
  def task_params
@@ -2,8 +2,8 @@ module Flyboy
2
2
  module ApplicationHelper
3
3
 
4
4
  def goal_color(goal)
5
- return "onalert" if Flyboy::Task.where('goal_id = ? AND done = ? AND term < ?', goal.id, false, Date.today).count > 0
6
- return "onwarning" if Flyboy::Task.where('goal_id = ? AND done = ? AND term > ? AND reminder < ?', goal.id , false, Date.today, Date.today).count > 0
5
+ return "onalert" if Flyboy::Task.where(taskable: goal).where('done = ? AND term < ?', false, Date.today).count > 0
6
+ return "onwarning" if Flyboy::Task.where(taskable: goal).where('done = ? AND term > ? AND reminder < ?', false, Date.today, Date.today).count > 0
7
7
  return "finished" if goal.closed?
8
8
  return "ontime"
9
9
  end
@@ -1,8 +1,6 @@
1
1
  module Flyboy
2
- class Ability
3
- include ::CanCan::Ability
4
-
5
- def initialize(user = nil)
2
+ module AbilityHelper
3
+ def define_flyboy_abilities
6
4
  # Allowed actions (all by default)
7
5
  can [:list, :create, :read, :update, :delete, :open, :close], Flyboy::Goal
8
6
  can [:list, :create, :read, :update, :delete, :complete, :snooze], Flyboy::Task
@@ -21,8 +19,12 @@ module Flyboy
21
19
  not goal.may_open?
22
20
  end
23
21
 
22
+ cannot :create, Flyboy::Task do |task|
23
+ task.taskable.present? && cannot?(:show, task.taskable)
24
+ end
25
+
24
26
  cannot [:create, :update, :delete], Flyboy::Task do |task|
25
- task.goal.closed?
27
+ task.taskable.is_a?(Flyboy::Goal) && task.taskable.closed?
26
28
  end
27
29
 
28
30
  cannot :complete, Flyboy::Task do |task|
@@ -32,7 +34,6 @@ module Flyboy
32
34
  cannot :snooze, Flyboy::Task do |task|
33
35
  task.done? || task.reminder >= Date.today
34
36
  end
35
-
36
37
  end
37
38
  end
38
39
  end
@@ -1,9 +1,8 @@
1
- require "dorsale/search"
2
-
3
1
  module Flyboy
4
2
  class Goal < ActiveRecord::Base
5
3
  include AASM
6
4
  include Dorsale::Search
5
+ include Dorsale::PolymorphicId
7
6
 
8
7
  paginates_per 50
9
8
 
@@ -20,9 +19,9 @@ module Flyboy
20
19
  end
21
20
  end
22
21
 
23
- has_many :tasks, dependent: :destroy
22
+ has_many :tasks, dependent: :destroy, as: :taskable
24
23
 
25
- validates :title, presence: true
24
+ validates :name, presence: true
26
25
  validates :status, inclusion: {
27
26
  in: proc { Flyboy::Goal.aasm.states.map(&:to_s) }
28
27
  }
@@ -1,17 +1,18 @@
1
1
  #encoding: utf-8
2
- require "dorsale/search"
3
2
 
4
3
  module Flyboy
5
4
  class Task < ActiveRecord::Base
6
5
  include Dorsale::Search
6
+ include Dorsale::PolymorphicId
7
7
 
8
8
  paginates_per 50
9
9
 
10
- belongs_to :goal
10
+ belongs_to :taskable, polymorphic: true
11
11
  has_many :comments, class_name: Flyboy::TaskComment, inverse_of: :task, dependent: :destroy
12
+ polymorphic_id_for :taskable
12
13
 
13
- validates :goal, presence: true
14
- validates :title, presence: true
14
+ validates :taskable, presence: true
15
+ validates :name, presence: true
15
16
  validates :term, presence: true
16
17
  validates :reminder, presence: true
17
18
 
@@ -32,11 +33,11 @@ module Flyboy
32
33
  self.progress = 0 if progress.nil?
33
34
  end
34
35
 
35
- after_save :update_goal_progress!
36
- after_destroy :update_goal_progress!
36
+ after_save :update_taskable_progress!
37
+ after_destroy :update_taskable_progress!
37
38
 
38
- def update_goal_progress!
39
- goal.update_progress!
39
+ def update_taskable_progress!
40
+ taskable.try(:update_progress!)
40
41
  end
41
42
 
42
43
  def snooze
@@ -64,8 +65,9 @@ module Flyboy
64
65
  def self.to_csv(options = {})
65
66
  CSV.generate(options) do |csv|
66
67
  csv << [
67
- "Dossier",
68
- "Avancement dossier",
68
+ "Taskable",
69
+ "Type",
70
+ "Avancement taskable",
69
71
  "Tâche",
70
72
  "Avancement tâche",
71
73
  "Echéance"
@@ -73,9 +75,10 @@ module Flyboy
73
75
 
74
76
  all.each do |task|
75
77
  csv << [
76
- task.goal.title,
77
- "#{task.goal.progress} %",
78
- task.title,
78
+ task.taskable.name,
79
+ task.taskable.class.model_name.human,
80
+ "#{task.taskable.try(:progress)} %",
81
+ task.name,
79
82
  "#{task.progress} %",
80
83
  I18n.l(task.term),
81
84
  ]
@@ -21,20 +21,22 @@ module Flyboy
21
21
 
22
22
  def display_tasks(tasks)
23
23
  display = [[
24
- "Dossier",
25
- "Avancement dossier",
24
+ "Taskable",
25
+ "Type",
26
+ "Avancement taskable",
26
27
  "Tâche",
27
28
  "Avancement tâche",
28
29
  "Echéance"
29
30
  ]]
30
31
 
31
- tasks.each do |t|
32
+ tasks.each do |task|
32
33
  display << [
33
- t.goal.title,
34
- percentage(t.goal.progress),
35
- t.title,
36
- percentage(t.progress),
37
- I18n.l(t.term)
34
+ task.taskable.name,
35
+ task.taskable.class.model_name.human,
36
+ percentage(task.taskable.try(:progress)),
37
+ task.name,
38
+ percentage(task.progress),
39
+ I18n.l(task.term)
38
40
  ]
39
41
  end
40
42
 
@@ -3,7 +3,7 @@
3
3
  = read_button goal_path(goal)
4
4
 
5
5
  - if can?(:create, goal.tasks.new)
6
- = create_button new_goal_task_path(goal), text: t("actions.goals.new_task")
6
+ = create_button new_task_path(taskable_guid: goal.guid), text: t("actions.goals.new_task")
7
7
 
8
8
  - if can?(:update, goal)
9
9
  = update_button edit_goal_path(goal)
@@ -1,6 +1,8 @@
1
+ - goal = goal || taskable
2
+
1
3
  .goal-context: .context
2
4
  = context_icon :tasks
3
- = context_title goal.title
5
+ = context_title goal.name
4
6
  = render "flyboy/goals/actions", goal: goal
5
7
 
6
8
  .infos
@@ -3,7 +3,7 @@
3
3
  = context_icon :tasks
4
4
 
5
5
  - if @goal.persisted?
6
- = context_title "Modifier #{@goal.title}"
6
+ = context_title "Modifier #{@goal.name}"
7
7
  - if can?(:delete, @goal)
8
8
  = delete_button goal_path(@goal)
9
9
 
@@ -14,7 +14,7 @@
14
14
  - content_for :main do
15
15
  .well
16
16
  = horizontal_form_for [flyboy, @goal] do |f|
17
- = f.input :title
17
+ = f.input :name
18
18
  = f.input :description
19
19
 
20
20
  = form_buttons
@@ -2,7 +2,7 @@ table
2
2
  thead
3
3
  tr
4
4
  th
5
- = sortable_column Flyboy::Goal.model_name.human, column: "title"
5
+ = sortable_column Flyboy::Goal.model_name.human, column: "name"
6
6
  th.hidden-xs
7
7
  = sortable_column Flyboy::Goal.human_attribute_name(:progress), column: "progress"
8
8
  th.hidden-xs
@@ -13,11 +13,11 @@ table
13
13
  tbody
14
14
  - goals.each do |goal|
15
15
  tr.goal class=goal_color(goal)
16
- td.title
16
+ td.name
17
17
  - if can? :read, goal
18
- = link_to goal.title, goal_path(goal)
18
+ = link_to goal.name, goal_path(goal)
19
19
  - else
20
- = goal.title
20
+ = goal.name
21
21
 
22
22
  td.goal_progress.hidden-xs
23
23
  = progress_bar percentage: goal.progress, label: true
@@ -26,5 +26,5 @@ table
26
26
  = t("messages.goals.status.#{goal.status}")
27
27
 
28
28
  td.actions
29
- - if can? :create, Flyboy::Task.new(goal: goal)
30
- = create_button flyboy.new_goal_task_path(goal), text: t("actions.goals.new_task")
29
+ - if can? :create, Flyboy::Task.new(taskable: goal)
30
+ = create_button flyboy.new_task_path(taskable_guid: goal.guid), text: t("actions.goals.new_task")
@@ -1,6 +1,6 @@
1
1
  .task-context: .context
2
2
  = context_icon :check_square_o
3
- = context_title task.title
3
+ = context_title task.name
4
4
  = render "flyboy/tasks/actions", task: task
5
5
 
6
6
  .infos
@@ -3,24 +3,26 @@
3
3
  = context_icon :check_square_o
4
4
 
5
5
  - if @task.persisted?
6
- = context_title "Modifier #{@task.title}"
6
+ = context_title "Modifier #{@task.name}"
7
7
  - if can?(:delete, @task)
8
8
  = delete_button task_path(@task)
9
9
 
10
10
  - else
11
11
  = context_title "Nouvelle tâche"
12
12
 
13
- = render "flyboy/goals/context", goal: @task.goal
13
+ - if can?(:read, @task.taskable)
14
+ = render "#{@task.taskable.class.to_s.tableize}/context", taskable: @task.taskable
14
15
 
15
16
  - content_for :main do
16
17
  .well
17
18
  = horizontal_form_for @task do |f|
18
- = f.input :title
19
+ = f.input :name
19
20
  = f.input :description
20
21
  = f.input :reminder, html5: true
21
22
  = f.input :term, html5: true
22
23
 
23
- = f.hidden_field :goal_id
24
+ = f.hidden_field :taskable_id
25
+ = f.hidden_field :taskable_type
24
26
 
25
27
  = form_buttons
26
28
 
@@ -3,9 +3,9 @@ table
3
3
  tr
4
4
  - unless nested
5
5
  th.hidden-xs
6
- = sortable_column Flyboy::Goal.model_name.human, column: "goal"
6
+ = sortable_column Flyboy::Task.human_attribute_name(:taskable), column: "taskable"
7
7
  th
8
- = sortable_column Flyboy::Task.model_name.human, column: "title"
8
+ = sortable_column Flyboy::Task.model_name.human, column: "name"
9
9
  th.hidden-xs
10
10
  = sortable_column Flyboy::Task.human_attribute_name(:progress), column: "progress"
11
11
  th.hidden-xs
@@ -17,17 +17,17 @@ table
17
17
  - tasks.each do |task|
18
18
  tr.task id="task_#{task.id}" class=task_color(task)
19
19
  - unless nested
20
- td.goal.hidden-xs
21
- - if can?(:read, task.goal)
22
- = link_to task.goal.title, goal_path(task.goal)
20
+ td.taskable.hidden-xs
21
+ - if can?(:read, task.taskable)
22
+ = link_to task.taskable.name, engine_polymorphic_path(task.taskable)
23
23
  - else
24
- = task.goal.title
24
+ = task.taskable.name
25
25
 
26
- td.title
26
+ td.name
27
27
  - if can?(:read, task)
28
- = link_to task.title, task_path(task)
28
+ = link_to task.name, flyboy.task_path(task)
29
29
  - else
30
- = task.title
30
+ = task.name
31
31
 
32
32
  td.task_progress.hidden-xs
33
33
  = progress_bar percentage: task.progress, label: true
@@ -37,7 +37,7 @@ table
37
37
 
38
38
  td.actions
39
39
  - if can?(:snooze, task)
40
- = snooze_button snooze_task_path(task)
40
+ = snooze_button flyboy.snooze_task_path(task)
41
41
 
42
42
  - if can?(:complete, task)
43
- = complete_button complete_task_path(task)
43
+ = complete_button flyboy.complete_task_path(task)