flyboy 1.0.7 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/app/controllers/flyboy/application_controller.rb +19 -4
- data/app/controllers/flyboy/goals_controller.rb +3 -3
- data/app/controllers/flyboy/tasks_controller.rb +20 -11
- data/app/helpers/flyboy/application_helper.rb +2 -2
- data/app/models/flyboy/{ability.rb → ability_helper.rb} +7 -6
- data/app/models/flyboy/goal.rb +3 -4
- data/app/models/flyboy/task.rb +16 -13
- data/app/pdfs/flyboy/roadmap.rb +10 -8
- data/app/views/flyboy/goals/_actions.html.slim +1 -1
- data/app/views/flyboy/goals/_context.html.slim +3 -1
- data/app/views/flyboy/goals/_form.html.slim +2 -2
- data/app/views/flyboy/goals/_list.html.slim +6 -6
- data/app/views/flyboy/tasks/_context.html.slim +1 -1
- data/app/views/flyboy/tasks/_form.html.slim +6 -4
- data/app/views/flyboy/tasks/_list.html.slim +11 -11
- data/app/views/flyboy/tasks/index.xls.erb +7 -5
- data/app/views/flyboy/tasks/show.html.slim +2 -2
- data/config/locales/fr.yml +3 -3
- data/config/routes.rb +1 -4
- data/db/migrate/20150525081421_tasks_belongs_to_taskable.rb +7 -0
- data/db/migrate/20150525114120_rename_title_to_name.rb +6 -0
- data/lib/flyboy/engine.rb +2 -0
- data/lib/flyboy/version.rb +1 -1
- data/spec/controllers/flyboy/goals_controller_spec.rb +14 -14
- data/spec/controllers/flyboy/tasks_controller_spec.rb +19 -19
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/models/ability.rb +8 -0
- data/spec/dummy/config/routes.rb +2 -2
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +8 -7
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +2520 -2715
- data/spec/dummy/log/test.log +156405 -27474
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_alerts.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_badges.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_breadcrumbs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_button-groups.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_carousel.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_close.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_code.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_component-animations.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_dropdowns.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_forms.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_glyphicons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_input-groups.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_jumbotron.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_labels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_list-group.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_media.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_mixins.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_modals.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_navbar.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_navs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_normalize.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_pager.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_pagination.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_panels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_popovers.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_print.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_progress-bars.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_responsive-embed.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_responsive-utilities.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_scaffolding.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_tables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_thumbnails.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_tooltip.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_type.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_utilities.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_variables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4e34439868ca5d289b34eee3a3857e43ec7085d1/_wells.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_alerts.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_background-variant.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_border-radius.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_center-block.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_clearfix.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_forms.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_gradients.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_grid-framework.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_hide-text.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_image.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_labels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_list-group.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_nav-divider.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_nav-vertical-align.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_opacity.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_pagination.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_panels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_progress-bar.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_reset-filter.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_resize.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_responsive-visibility.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_size.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_tab-focus.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_table-row.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_text-emphasis.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_text-overflow.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bbf0946636e65586cb8f7432099bcd1bceb091d9/_vendor-prefixes.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/all.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/comments.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/contexts.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/filters.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/flash.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/forms.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/pagination.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/styles.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bde773e21f621643da470aae17100c7569c05cc8/tables.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e66ce83b9b8e021b9cae55d9b38367c09c2c8adf/_bootstrap-sprockets.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e66ce83b9b8e021b9cae55d9b38367c09c2c8adf/_bootstrap.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/ec3033521a9a2a5fc1c57f6d8eef2f7ab7aea9d2/_font-awesome-sprockets.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/ec3033521a9a2a5fc1c57f6d8eef2f7ab7aea9d2/font-awesome.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_animated.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_bordered-pulled.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_core.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_fixed-width.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_icons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_larger.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_list.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_mixins.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_path.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_rotated-flipped.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_stacked.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f1ca82597190be3308c111ad654c6c6b7d2b4cc2/_variables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/02760a27d9de50c06581e7199e10b790 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/044b2ea3e0a9d34028d0af55eadb2981 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0845e69fa33bf3206ebe5dda99bc9843 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0fb5af0feae7e56138e28bac2c7c191c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/12ec72982ea3f253ad1c16f9d545e9cb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/13474356756eb389416e44a0ddeff07d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/22b68a0c021dc3a000514bd46687b656 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/32341e29ada6a2565af1ff2a4ec82d78 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/467be2bbae063498a5122af60e0950e9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/50bf11084bee4d4c5b42ad61d3fa4f80 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/535583d5f97b123d441fcf3354c2b222 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/591d86a67fffbda5d029424968ab5eb7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5be93061694476ced3bdcc9c67390dac +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6623ec3e3c17f248645febb398617c40 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/676accaff438e6b271758557154e2f12 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/69c5f29dcec0e20eca63838e1aa400c8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6a861d25b6c13ce3badd1f2bf1234bb0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6ab708d682277335bc93bdc02cf27153 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/72fcd10b62e1d0077ed7097ddbdec7ec +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/74a2e2c4822266a8e24262c3b60829fb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/74bca4da6effdf83108ce52f7e6c1d5a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/75997b26090637a57f89e75d7ae0dfa2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/79edb8f3411453961d10988f14876343 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7de92894e194df67224196737b85b14a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/800788cadba4d4bede74a4446a4ed9d8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/85aced8a467e95ac9516e2306d76d6e0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/85e37ca2d41ffe6bbccc02af361aad82 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/885a64098b57fc973b4aa5186acc6382 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9024af0b8ef7de7d15ef074f6ba9015a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/92c8627f9bde383f2569c95353130883 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9ec29c175ce464968564f1602774fe9f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a4155f9ef0ce1743a1a3ec66ed09e6f9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a88d9c609d05fcc4670c8742b41816c0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a9eb3ff8189f71e060d63c886d97ac78 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b227a0fdba22b9b08f4dc87e47ce1875 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c0f8220882fe2b96356384d1e61f511a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cc4177a7d907d6e97bbdf17b95ca7bb8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d84d4e8670f9f920c9dd6bdda22df75a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d87810c66e05721ba749c5901c1af296 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d9304523bd34cb3dd17174f74d8e5421 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/de73b90a586a6312cd83ece6298b514d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e1430951fdc18f19b3ea53e2021eff59 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ead4de885816c402cbc7de0c786c2b5a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ebbf6e34b9c86d76a2df717cb5c15080 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ebe08f689f659c024f467b77f32a1c49 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ef789f8fafa6a77f78f5cd4ce96ca310 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f29201f8014dd937e7e75e6e09423b0b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f657e5c9b0f84af1a2e801d5693f252c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0845e69fa33bf3206ebe5dda99bc9843 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/591d86a67fffbda5d029424968ab5eb7 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/69c5f29dcec0e20eca63838e1aa400c8 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/6a861d25b6c13ce3badd1f2bf1234bb0 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/6ab708d682277335bc93bdc02cf27153 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/74a2e2c4822266a8e24262c3b60829fb +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/75997b26090637a57f89e75d7ae0dfa2 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/85aced8a467e95ac9516e2306d76d6e0 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/a4155f9ef0ce1743a1a3ec66ed09e6f9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d84d4e8670f9f920c9dd6bdda22df75a +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/ef789f8fafa6a77f78f5cd4ce96ca310 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f657e5c9b0f84af1a2e801d5693f252c +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/factories/flyboy_goals.rb +2 -2
- data/spec/factories/flyboy_tasks.rb +2 -2
- data/spec/helpers/flyboy/application_helper_spec.rb +6 -6
- data/spec/models/flyboy/ability_spec.rb +14 -6
- data/spec/models/flyboy/goal_spec.rb +6 -6
- data/spec/models/flyboy/task_spec.rb +3 -3
- data/spec/routes/flyboy/goals_routing_spec.rb +0 -4
- data/spec/routes/flyboy/tasks_routing_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- metadata +332 -52
- data/spec/dummy/tmp/pids/server.pid +0 -1
checksums.yaml
ADDED
@@ -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 "
|
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 "
|
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
|
-
[:
|
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 "
|
15
|
+
when "name", "status"
|
16
16
|
%(LOWER(flyboy_tasks.#{column}) #{direction})
|
17
17
|
when "progress", "term"
|
18
18
|
%(flyboy_tasks.#{column} #{direction})
|
19
|
-
when "
|
20
|
-
|
21
|
-
|
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
|
-
|
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
|
-
@
|
65
|
-
@task
|
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
|
-
@
|
153
|
+
@taskable = @task.taskable
|
145
154
|
end
|
146
155
|
|
147
156
|
def permitted_params
|
148
|
-
[:
|
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('
|
6
|
-
return "onwarning" if Flyboy::Task.where('
|
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
|
-
|
3
|
-
|
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.
|
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
|
data/app/models/flyboy/goal.rb
CHANGED
@@ -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 :
|
24
|
+
validates :name, presence: true
|
26
25
|
validates :status, inclusion: {
|
27
26
|
in: proc { Flyboy::Goal.aasm.states.map(&:to_s) }
|
28
27
|
}
|
data/app/models/flyboy/task.rb
CHANGED
@@ -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 :
|
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 :
|
14
|
-
validates :
|
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 :
|
36
|
-
after_destroy :
|
36
|
+
after_save :update_taskable_progress!
|
37
|
+
after_destroy :update_taskable_progress!
|
37
38
|
|
38
|
-
def
|
39
|
-
|
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
|
-
"
|
68
|
-
"
|
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.
|
77
|
-
|
78
|
-
task.
|
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
|
]
|
data/app/pdfs/flyboy/roadmap.rb
CHANGED
@@ -21,20 +21,22 @@ module Flyboy
|
|
21
21
|
|
22
22
|
def display_tasks(tasks)
|
23
23
|
display = [[
|
24
|
-
"
|
25
|
-
"
|
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 |
|
32
|
+
tasks.each do |task|
|
32
33
|
display << [
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
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)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
= context_icon :tasks
|
4
4
|
|
5
5
|
- if @goal.persisted?
|
6
|
-
= context_title "Modifier #{@goal.
|
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 :
|
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: "
|
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.
|
16
|
+
td.name
|
17
17
|
- if can? :read, goal
|
18
|
-
= link_to goal.
|
18
|
+
= link_to goal.name, goal_path(goal)
|
19
19
|
- else
|
20
|
-
= goal.
|
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(
|
30
|
-
= create_button flyboy.
|
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")
|
@@ -3,24 +3,26 @@
|
|
3
3
|
= context_icon :check_square_o
|
4
4
|
|
5
5
|
- if @task.persisted?
|
6
|
-
= context_title "Modifier #{@task.
|
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
|
-
|
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 :
|
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 :
|
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::
|
6
|
+
= sortable_column Flyboy::Task.human_attribute_name(:taskable), column: "taskable"
|
7
7
|
th
|
8
|
-
= sortable_column Flyboy::Task.model_name.human, column: "
|
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.
|
21
|
-
- if can?(:read, task.
|
22
|
-
= link_to task.
|
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.
|
24
|
+
= task.taskable.name
|
25
25
|
|
26
|
-
td.
|
26
|
+
td.name
|
27
27
|
- if can?(:read, task)
|
28
|
-
= link_to task.
|
28
|
+
= link_to task.name, flyboy.task_path(task)
|
29
29
|
- else
|
30
|
-
= task.
|
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)
|