flyboy 1.0.7 → 1.1.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.
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)