lina 0.0.1
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +279 -0
- data/Rakefile +34 -0
- data/app/assets/javascripts/lina/abn_tree_directive.js +492 -0
- data/app/assets/javascripts/lina/apidoc_controller.js +30 -0
- data/app/assets/javascripts/lina/application.js +13 -0
- data/app/assets/stylesheets/lina/abn_tree.css +121 -0
- data/app/assets/stylesheets/lina/apidoc.css.scss +81 -0
- data/app/assets/stylesheets/lina/application.css.scss +8 -0
- data/app/controllers/lina/apidoc_controller.rb +31 -0
- data/app/controllers/lina/application_controller.rb +65 -0
- data/app/controllers/lina/base_controller.rb +33 -0
- data/app/controllers/lina/schema_controller.rb +16 -0
- data/app/helpers/lina/application_helper.rb +4 -0
- data/app/views/layouts/lina/application.html.erb +14 -0
- data/app/views/lina/apidoc/index.html.erb +68 -0
- data/app/views/lina/schema/index.html.erb +2 -0
- data/config/routes.rb +6 -0
- data/lib/generators/lina/api_generator.rb +59 -0
- data/lib/generators/lina/install_generator.rb +15 -0
- data/lib/generators/templates/controller.rb +25 -0
- data/lib/generators/templates/lina.rb +18 -0
- data/lib/lina/engine.rb +24 -0
- data/lib/lina/error.rb +13 -0
- data/lib/lina/rails/router.rb +7 -0
- data/lib/lina/schema.rb +61 -0
- data/lib/lina/tree.rb +102 -0
- data/lib/lina/version.rb +3 -0
- data/lib/lina.rb +14 -0
- data/lib/tasks/lina_tasks.rake +4 -0
- data/test/controllers/lina/schema_controller_test.rb +21 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/admin/posts_controller.rb +11 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/desks_controller.rb +77 -0
- data/test/dummy/app/controllers/labels_controller.rb +11 -0
- data/test/dummy/app/controllers/posts_controller.rb +43 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/desks/index.json.jbuilder +3 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +27 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +78 -0
- data/test/dummy/config/environments/test.rb +40 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +14 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +34650 -0
- data/test/dummy/log/test.log +9169 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/test/apidoc/apidoc_controller_test.rb +69 -0
- data/test/dummy/test/controllers/admin/posts_controller_test.rb +9 -0
- data/test/dummy/test/controllers/desks_controller_test.rb +21 -0
- data/test/dummy/test/controllers/labels_controller_test.rb +9 -0
- data/test/dummy/test/controllers/posts_controller_test.rb +4 -0
- data/test/dummy/tmp/cache/assets/development/sass/01b8611d091d8436083c64923a2a7c73c902e374/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/01b8611d091d8436083c64923a2a7c73c902e374/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/abn_tree.cssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/apidoc.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/apidoc.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/application.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/treeview.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/abc2cd492b887efa07be432be1212e4686fb3472/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/abc2cd492b887efa07be432be1212e4686fb3472/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/00e6b161438b87a84be1751cafd0b33e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0177ac3c7e291854f328a338b3f84473 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/04611c51cd5b7bf26e6244fa19a5bfbd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/09e1b5aecad798e1f4705e3d3a00e209 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0d07e65748f3eed25c1381cc2539f663 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0ed89e94602754c757ab75f3d61e675c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0eedaee8dc028dbb9c47361390cdc997 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1333d1f6dc7600e3a8ad3ba82fe7eb79 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1577d2d6ed493aa41d8a0f599887e3ef +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/16eb8bdb244ad93a289231517048c16f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1b26aa829780a6bf9c590d1d82ce5e68 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1bc052a981f4e8c8393d2895b316dd54 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1d96db21082925681c0ae624e3c21c00 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/215381dce6f8f8449bce2b684eca616e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2291e47b257f73ff5028d25910587f80 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/25d0826bdd3b281516f489234cb17486 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2bb880dc61218e8055d4cf2232ca1190 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2bc45c4dea60819420597a52edc4d3fc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2d26ae7e6c673d71bbbbc43ec5973419 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2ede05410fadfa970185d1850c18065c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3026a315cbe82741de14ba37974f83a3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/314eaf4689393dc94b3a79296e01264c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/31cf5ea84fdd12d56a891b402b3b4bd3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/36f4fe802e0012348ec9ebeab004e11d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/37174a1556289cff8371d738701222ad +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3748756ea72001bbdce8bc2b7384a28f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3778e1b875202b71d8638dd8123c5f89 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3a56a0e21d99f3a6afbb72d2eee45cf3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3cbcf642404b0a57c52152da56111361 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3cf123cdce3d00928efac39065d39694 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3e0cbf7e0b9e740fe59f038788c5ba34 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3e160ae795b28a4d9c81b5ec6ae2358f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/40b35b0774eaf0ebc1fbce60e8ce986b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/43e412a8372c76fa1ad63aeb781537e2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/44654113f4af81260834f3698932a752 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/46aa04326b4b631c9c11e30489cd5019 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/478a09f1f4465ea97a2393d3de51d9ce +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4aadd896e36ec170acd5599832d6f437 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4c2a6e265fd6f2fc816fcd4bc5a8a545 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4c554066e5797be6f8f19a086e94ab84 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4dde11ed2f71003d1bab7cb966dcc5f0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/55bba7999b7a8997aa8984876f8fbe44 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/56faefc2044b45566103f0e69a6ba0a3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5792e6bec3ee138aed63fc28fadb0992 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5e65261e87b48e362a8c0a6f34dd42fa +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/60aa9ad05d88b54cc81d475ecad3c702 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/60da8e2105fc458c2af620764edd5dbf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/67a84d0b00c66adf4b90999c09a86cd8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6ab20a712ea8223592e9f69263cdd7bf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6b72d01244b0a3a17f03038f67102764 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6ced499da2ad525b37a28fc98bbcdb56 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/74257787a28465247f2d30ccab279a55 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7489fa33982e8b7cffebe865dc851dbf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/74b12f12df91227887ea1ef6c9bcaf33 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/754081bb500bbea49ad654bc694640bb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7573cc762360be54770799f725a2c580 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/75f6ed27eb0adbf8e6013af2e1c57f10 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/761f128f6b0e6bbf0739728ea59961d1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7a0d8c80576b62d0f7f7e4683d4ed82d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/80f425e1319787de77befd9ee65309b8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/816bfd11725a6e3a206bfed45256be5a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/81c51b576f15cc418c010aa9b574b4dd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/86044212558bebfe609f5c0dc9cc2456 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/86a50a0819617ecca8256b7ae7cc96af +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8aeda1540114ca841ccc833537237d16 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8f9f1485f3bdae6c49e3b0ca3b73ebaf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/98e798a6f204a5c910e153af3f71f46c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9cbf5a263bd030c898e7d6d9585985a9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a043b22bc295dcfac547653bf9f8a81b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a20e753efb5d9444333059805c73b847 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a24ae377d02c084dfd57f33fe65235bf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a4dee2e02e8ce21babef0bbc5c84923e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a72a0ca279be378360aff72b54cc63b9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a81e8ef67f6c04c50d86b599129d0512 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/acf90806165c61008775c884ca3c34a2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ad488d1e70a84c2b138ec2416bb91f91 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/af3c2c5c558c86fe4df50af814239b7a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b85f341c9e64d9d51e08e7382a262a2c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b8e025aca169876cc68f351eaee3491f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/be482a8ab680e404d9e36ad99f5d9ca2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bea974644289dd0bfba852707b92ee40 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c5b2d0d30dfb1cce02bb0f869dfbb587 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c710b82db0a04a4a87288b9f56357952 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c95da3e8bdea9fcf2647f2f30c7846fa +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9a0e3aee21650597692b0e2efd06afb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9c964e86d38a4f4d253aea41002ff5c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cc9d3139fb2d9758196103e394bce5fe +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d4d8506d923674f1faa8409de8c45c4a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d786f49f82b2f23599047341b92c2a90 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d7dc25a75f37db88dc1c4441c2412c5f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/da2efc4327b396451ef6d5be35a6e4c9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e23cb01a12c8f7d82772eb0c0430b061 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e543814bde1883f4d9ec7840683a6b59 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/eb78d18b7f4c52b2cd8a307cd6d3a015 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ebb90427e68b577cd130f25b4012e190 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ec9f690837c02229e6b2e1a979990361 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f02aa00e6cb80064a667cce8fd01fe70 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f0d5e0ca535e8f7fe1d26f32b9d8f34f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f0e99e44f24e432fc1409cffe173bfa3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f275c3c3c8bdfa6ea0602883d9a92dc1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f3708234235bc49a0a625d731d815b19 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f4594f530c2ec8c5fe85d7fd61b01f10 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f4e4f7b077370875d66bd890b0ba36d3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f5f15562a56635717efb1b395c3de2a6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f6068286ad6ac0ea26573e50c05a42c7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f794aa494de85bff62b026a35b9194f9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fd68e887e6e8c04fbee49c4155af80ea +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fe54f36cff9a71f7510b9b3e8e4ef387 +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/01b8611d091d8436083c64923a2a7c73c902e374/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/01b8611d091d8436083c64923a2a7c73c902e374/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/1bf04022343ad4475a8cf15b12282e94de90b575/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/2201d2e082f2b7d233c0246f42ebc321bb30eba9/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/abn_tree.cssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/apidoc.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/application.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/31f62b379790380fb7c14342e6a18bd5f1f962b5/treeview.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/808a5fba4383f3169ec1f487de1172a09bbf8ad1/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/83c66e71e63f515e594b520490b9ada5ef1557cf/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/abc2cd492b887efa07be432be1212e4686fb3472/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/abc2cd492b887efa07be432be1212e4686fb3472/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/0177ac3c7e291854f328a338b3f84473 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/04611c51cd5b7bf26e6244fa19a5bfbd +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/09e1b5aecad798e1f4705e3d3a00e209 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/0ed89e94602754c757ab75f3d61e675c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/0eedaee8dc028dbb9c47361390cdc997 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1577d2d6ed493aa41d8a0f599887e3ef +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1b26aa829780a6bf9c590d1d82ce5e68 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1bc052a981f4e8c8393d2895b316dd54 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2291e47b257f73ff5028d25910587f80 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2bb880dc61218e8055d4cf2232ca1190 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2d26ae7e6c673d71bbbbc43ec5973419 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3026a315cbe82741de14ba37974f83a3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/314eaf4689393dc94b3a79296e01264c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/31cf5ea84fdd12d56a891b402b3b4bd3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/36f4fe802e0012348ec9ebeab004e11d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/37174a1556289cff8371d738701222ad +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3748756ea72001bbdce8bc2b7384a28f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3778e1b875202b71d8638dd8123c5f89 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3a56a0e21d99f3a6afbb72d2eee45cf3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3cbcf642404b0a57c52152da56111361 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3cf123cdce3d00928efac39065d39694 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3e0cbf7e0b9e740fe59f038788c5ba34 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3e160ae795b28a4d9c81b5ec6ae2358f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/40b35b0774eaf0ebc1fbce60e8ce986b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/43e412a8372c76fa1ad63aeb781537e2 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/46aa04326b4b631c9c11e30489cd5019 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4aadd896e36ec170acd5599832d6f437 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4dde11ed2f71003d1bab7cb966dcc5f0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/56faefc2044b45566103f0e69a6ba0a3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5e65261e87b48e362a8c0a6f34dd42fa +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/60aa9ad05d88b54cc81d475ecad3c702 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/6b72d01244b0a3a17f03038f67102764 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/74257787a28465247f2d30ccab279a55 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/7573cc762360be54770799f725a2c580 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/75f6ed27eb0adbf8e6013af2e1c57f10 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/761f128f6b0e6bbf0739728ea59961d1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/7a0d8c80576b62d0f7f7e4683d4ed82d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/816bfd11725a6e3a206bfed45256be5a +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/81c51b576f15cc418c010aa9b574b4dd +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/86044212558bebfe609f5c0dc9cc2456 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/86a50a0819617ecca8256b7ae7cc96af +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/8f9f1485f3bdae6c49e3b0ca3b73ebaf +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9cbf5a263bd030c898e7d6d9585985a9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a043b22bc295dcfac547653bf9f8a81b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a20e753efb5d9444333059805c73b847 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a24ae377d02c084dfd57f33fe65235bf +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a4dee2e02e8ce21babef0bbc5c84923e +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a72a0ca279be378360aff72b54cc63b9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a81e8ef67f6c04c50d86b599129d0512 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/af3c2c5c558c86fe4df50af814239b7a +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b85f341c9e64d9d51e08e7382a262a2c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b8e025aca169876cc68f351eaee3491f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/be482a8ab680e404d9e36ad99f5d9ca2 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/bea974644289dd0bfba852707b92ee40 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c95da3e8bdea9fcf2647f2f30c7846fa +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c9c964e86d38a4f4d253aea41002ff5c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/cc9d3139fb2d9758196103e394bce5fe +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d4d8506d923674f1faa8409de8c45c4a +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d786f49f82b2f23599047341b92c2a90 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/da2efc4327b396451ef6d5be35a6e4c9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/e23cb01a12c8f7d82772eb0c0430b061 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/eb78d18b7f4c52b2cd8a307cd6d3a015 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f02aa00e6cb80064a667cce8fd01fe70 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f0d5e0ca535e8f7fe1d26f32b9d8f34f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f3708234235bc49a0a625d731d815b19 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f4e4f7b077370875d66bd890b0ba36d3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f794aa494de85bff62b026a35b9194f9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/fd68e887e6e8c04fbee49c4155af80ea +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/fe54f36cff9a71f7510b9b3e8e4ef387 +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/lina_test.rb +7 -0
- data/test/test_helper.rb +20 -0
- data/test/tree_test.rb +15 -0
- metadata +1282 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
.apidoc-page {
|
|
2
|
+
height: 100%;
|
|
3
|
+
margin-right: 0;
|
|
4
|
+
margin-left: 0;
|
|
5
|
+
|
|
6
|
+
.apidoc-title {
|
|
7
|
+
border-bottom: 1px solid #eee;
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: 16px;
|
|
10
|
+
text-align: center;
|
|
11
|
+
font-weight: 200;
|
|
12
|
+
color: #999;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.more-info {
|
|
16
|
+
white-space: pre;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.api-left-tree {
|
|
20
|
+
height: 100%;
|
|
21
|
+
overflow-y: auto;
|
|
22
|
+
background: #FAFAFA;
|
|
23
|
+
border-right: 1px solid #eee;
|
|
24
|
+
padding: 0;
|
|
25
|
+
font-size: 16px;
|
|
26
|
+
.nav-pills > li > a {
|
|
27
|
+
border-radius: 0;
|
|
28
|
+
padding: 6px;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.api-contents {
|
|
33
|
+
padding-top: 10px;
|
|
34
|
+
height: 100%;
|
|
35
|
+
overflow-y: auto;
|
|
36
|
+
font-size: 20px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.path {
|
|
40
|
+
font-size: 32px;
|
|
41
|
+
padding: 0px 0 15px 0;
|
|
42
|
+
.path-path {
|
|
43
|
+
font-size: 28px;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.name {
|
|
48
|
+
margin-bottom: 15px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.description {
|
|
52
|
+
white-space: pre;
|
|
53
|
+
color: #999;
|
|
54
|
+
font-size: 75%;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.parameters-title, .return-title {
|
|
58
|
+
margin-top: 28px;
|
|
59
|
+
font-size: 28px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.table-wrapper {
|
|
63
|
+
background: #E8F4FF;
|
|
64
|
+
padding: 10px 20px 20px;
|
|
65
|
+
margin-bottom: 30px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.table {
|
|
69
|
+
font-size: 16px;
|
|
70
|
+
padding-bottom: 0;
|
|
71
|
+
margin-bottom: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.table > thead > tr > th {
|
|
75
|
+
border: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.table > tbody > tr > td {
|
|
79
|
+
border: none;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_dependency "lina/base_controller"
|
|
2
|
+
|
|
3
|
+
module Lina
|
|
4
|
+
class ApidocController < BaseController
|
|
5
|
+
def index
|
|
6
|
+
all_routes = Rails.application.routes.routes
|
|
7
|
+
inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes)
|
|
8
|
+
|
|
9
|
+
# 过滤出所有 API 相关的路由
|
|
10
|
+
api_routes = []
|
|
11
|
+
@user_api_controllers = user_api_controllers
|
|
12
|
+
@user_api_controllers.each do |controller|
|
|
13
|
+
api_routes += inspector.send(:filter_routes, controller)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
@routes = inspector.send(:collect_routes, api_routes)
|
|
17
|
+
# add schema info to route
|
|
18
|
+
@routes.each do |route|
|
|
19
|
+
controller, action = route[:reqs].split('#')
|
|
20
|
+
route[:schema] = str2controller(controller).action_schema(action)
|
|
21
|
+
route[:path].gsub!('(.:format)', '')
|
|
22
|
+
end
|
|
23
|
+
@_tree = Lina::Tree.new(@routes)
|
|
24
|
+
@tree = @_tree.to_tree
|
|
25
|
+
respond_to do |format|
|
|
26
|
+
format.html
|
|
27
|
+
format.json { render json: @tree }
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module Lina
|
|
2
|
+
class ApplicationController < ActionController::Base
|
|
3
|
+
|
|
4
|
+
def send_action(method_name, *args)
|
|
5
|
+
block = self.class.action_block(method_name)
|
|
6
|
+
schema = self.class.action_schema(method_name)
|
|
7
|
+
if block
|
|
8
|
+
Lina::Validator.params_check(schema[:params], params)
|
|
9
|
+
ret = self.instance_exec(*args, &block)
|
|
10
|
+
default_render unless performed?
|
|
11
|
+
Lina::Validator.return_check(schema[:return], response.body)
|
|
12
|
+
ret
|
|
13
|
+
else
|
|
14
|
+
super
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
before_filter :default_format_json
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
def default_format_json
|
|
22
|
+
request.format = "json" unless params[:format]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class <<self
|
|
26
|
+
_actions = {}
|
|
27
|
+
def define_action(name, schema={}, &block)
|
|
28
|
+
Lina::Validator.api_spec_check(Lina::Schema.argument, schema)
|
|
29
|
+
_actions[name] = { schema: schema, block: block }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def action_methods
|
|
33
|
+
@@action_methods = begin
|
|
34
|
+
methods = (api_actions + public_instance_methods(true) -
|
|
35
|
+
internal_methods +
|
|
36
|
+
public_instance_methods(false)).uniq.map { |x| x.to_s } -
|
|
37
|
+
hidden_actions.to_a
|
|
38
|
+
Set.new(methods.reject { |method| method =~ /_one_time_conditions/ })
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# 所有支持的 API 列表
|
|
43
|
+
def api_actions
|
|
44
|
+
_actions.keys
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# 返回所有实例
|
|
48
|
+
def api_action_instances
|
|
49
|
+
_actions
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def action_schema(name)
|
|
53
|
+
_actions[name.to_sym] && _actions[name.to_sym][:schema]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def action_block(name)
|
|
57
|
+
_actions[name.to_sym] && _actions[name.to_sym][:block]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def _actions
|
|
61
|
+
@actions ||= {}
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Lina
|
|
2
|
+
class BaseController < ActionController::Base
|
|
3
|
+
layout 'lina/application'
|
|
4
|
+
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
# 取得用户使用的所有 API 控制器
|
|
8
|
+
# 避免直接使用 Class 对象, 将它们转化为
|
|
9
|
+
# 字符串形式
|
|
10
|
+
# eg: [ 'posts', 'desks' ]
|
|
11
|
+
def user_api_controllers
|
|
12
|
+
Rails.application.eager_load!
|
|
13
|
+
all_subclasses(Lina::ApplicationController, true)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def str2controller(klass_str)
|
|
17
|
+
::Kernel.const_get(klass_str.to_s.camelize + 'Controller')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def all_subclasses(klass, convert_to_string=true)
|
|
21
|
+
ret = []
|
|
22
|
+
klass.subclasses.each do |k|
|
|
23
|
+
if convert_to_string
|
|
24
|
+
ret << k.to_s.underscore.sub(/_controller$/, '')
|
|
25
|
+
else
|
|
26
|
+
ret << k
|
|
27
|
+
end
|
|
28
|
+
ret += all_subclasses(k, convert_to_string)
|
|
29
|
+
end
|
|
30
|
+
ret
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require_dependency "lina/base_controller"
|
|
2
|
+
|
|
3
|
+
module Lina
|
|
4
|
+
class SchemaController < BaseController
|
|
5
|
+
def index
|
|
6
|
+
if ! controller = user_api_controllers.find { |c| c == params[:schema_controller] }
|
|
7
|
+
raise "Controller #{params[:schema_controller]} 无法找到"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
action = params[:schema_action].to_sym
|
|
11
|
+
if ! @schema = str2controller(controller)._actions[action]
|
|
12
|
+
raise "Action #{action} 无法找到"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html ng-app='app'>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Lina</title>
|
|
5
|
+
<%= stylesheet_link_tag "lina/application", media: "all" %>
|
|
6
|
+
<%= javascript_include_tag "lina/application" %>
|
|
7
|
+
<%= csrf_meta_tags %>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
|
|
11
|
+
<%= yield %>
|
|
12
|
+
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<div class="row apidoc-page" ng-controller='ApidocController' ng-init="setData('<%= lina.data_path %>')">
|
|
2
|
+
|
|
3
|
+
<div class="col-md-3 api-left-tree">
|
|
4
|
+
<h4 class='apidoc-title'>APIDOC</h4>
|
|
5
|
+
<abn-tree tree-data="my_data" tree-control="my_tree" on-select='showApi(branch)'></abn-tree>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="col-md-9 api-contents">
|
|
8
|
+
<ul class='list-unstyled'>
|
|
9
|
+
<li ng-repeat='api in currentApi'>
|
|
10
|
+
<div class='path'>
|
|
11
|
+
<span class='path-verb'> {{ api.verb }} </span>
|
|
12
|
+
<span class='path-path'> {{ api.path }} </span>
|
|
13
|
+
</div>
|
|
14
|
+
<div class="name">{{ api.schema.name }}</div>
|
|
15
|
+
<p class='description'>{{ api.schema.description }}</p>
|
|
16
|
+
<h4 class='parameters-title'>Parameter</h4>
|
|
17
|
+
<div class="table-wrapper">
|
|
18
|
+
<table class='table'>
|
|
19
|
+
<thead>
|
|
20
|
+
<tr>
|
|
21
|
+
<th width='20%'>Name</th>
|
|
22
|
+
<th width='20%'>Type</th>
|
|
23
|
+
<th width='25%'>More Info</th>
|
|
24
|
+
<th>Description</th>
|
|
25
|
+
</tr>
|
|
26
|
+
</thead>
|
|
27
|
+
<tbody>
|
|
28
|
+
<tr ng-repeat='(key, value) in api.schema.params.properties'>
|
|
29
|
+
<td><span>{{ key }}
|
|
30
|
+
<span class="label label-primary" ng-show='isRequired(api.schema.params, key)'>must</span>
|
|
31
|
+
<span class="label label-default" ng-hide='isRequired(api.schema.params, key)'>optional</span>
|
|
32
|
+
</td>
|
|
33
|
+
<td>{{ value.type }}</td>
|
|
34
|
+
<td class='more-info'>{{ moreInfo(value) }}</td>
|
|
35
|
+
<td>{{ value.description }}</td>
|
|
36
|
+
</tr>
|
|
37
|
+
</tbody>
|
|
38
|
+
</table>
|
|
39
|
+
</div><!-- .table-wrapper -->
|
|
40
|
+
|
|
41
|
+
<h4 class='return-title'>Return</h4>
|
|
42
|
+
<div class="table-wrapper">
|
|
43
|
+
<table class='table'>
|
|
44
|
+
<thead>
|
|
45
|
+
<tr>
|
|
46
|
+
<th width='20%'>Name</th>
|
|
47
|
+
<th width='20%'>Type</th>
|
|
48
|
+
<th width='25%'>More Info</th>
|
|
49
|
+
<th>Description</th>
|
|
50
|
+
</tr>
|
|
51
|
+
</thead>
|
|
52
|
+
<tbody>
|
|
53
|
+
<tr ng-repeat='(key, value) in api.schema.return.properties'>
|
|
54
|
+
<td><span>{{ key }}
|
|
55
|
+
<span class="label label-primary" ng-show='isRequired(api.schema.return, key)'>must</span>
|
|
56
|
+
<span class="label label-default" ng-hide='isRequired(api.schema.return, key)'>optional</span>
|
|
57
|
+
</td>
|
|
58
|
+
<td>{{ value.type }}</td>
|
|
59
|
+
<td class='more-info'>{{ moreInfo(value) }}</td>
|
|
60
|
+
<td>{{ value.description }}</td>
|
|
61
|
+
</tr>
|
|
62
|
+
</tbody>
|
|
63
|
+
</table>
|
|
64
|
+
</div><!-- .table-wrapper -->
|
|
65
|
+
</li>
|
|
66
|
+
</ul>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Lina
|
|
2
|
+
module Generators
|
|
3
|
+
class ApiGenerator < Rails::Generators::NamedBase # :nodoc:
|
|
4
|
+
argument :actions, type: :array, default: [], banner: "action action"
|
|
5
|
+
check_class_collision suffix: "Controller"
|
|
6
|
+
|
|
7
|
+
source_root File.expand_path("../../templates", __FILE__)
|
|
8
|
+
|
|
9
|
+
def create_controller_files
|
|
10
|
+
template 'controller.rb', File.join('app/controllers', class_path, "#{file_name}_controller.rb")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def add_routes
|
|
14
|
+
actions.reverse.each do |action|
|
|
15
|
+
route generate_routing_code(action)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
hook_for :test_framework, as: :controller
|
|
20
|
+
if Lina.generate_views
|
|
21
|
+
hook_for :jbuilder, in: :rails, default: true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
# This method creates nested route entry for namespaced resources.
|
|
27
|
+
# For eg. rails g controller foo/bar/baz index
|
|
28
|
+
# Will generate -
|
|
29
|
+
# namespace :foo do
|
|
30
|
+
# namespace :bar do
|
|
31
|
+
# get 'baz/index'
|
|
32
|
+
# end
|
|
33
|
+
# end
|
|
34
|
+
def generate_routing_code(action)
|
|
35
|
+
depth = regular_class_path.length
|
|
36
|
+
# Create 'namespace' ladder
|
|
37
|
+
# namespace :foo do
|
|
38
|
+
# namespace :bar do
|
|
39
|
+
namespace_ladder = regular_class_path.each_with_index.map do |ns, i|
|
|
40
|
+
indent("namespace :#{ns} do\n", i * 2)
|
|
41
|
+
end.join
|
|
42
|
+
|
|
43
|
+
# Create route
|
|
44
|
+
# get 'baz/index'
|
|
45
|
+
route = indent(%{get '#{file_name}/#{action}'\n}, depth * 2)
|
|
46
|
+
|
|
47
|
+
# Create `end` ladder
|
|
48
|
+
# end
|
|
49
|
+
# end
|
|
50
|
+
end_ladder = (1..depth).reverse_each.map do |i|
|
|
51
|
+
indent("end\n", i * 2)
|
|
52
|
+
end.join
|
|
53
|
+
|
|
54
|
+
# Combine the 3 parts to generate complete route entry
|
|
55
|
+
namespace_ladder + route + end_ladder
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Lina
|
|
2
|
+
module Generators
|
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
|
4
|
+
source_root File.expand_path("../../templates", __FILE__)
|
|
5
|
+
desc "Create a lina initializer"
|
|
6
|
+
def copy_initializer
|
|
7
|
+
template "lina.rb", "config/initializers/lina.rb"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def insert_router
|
|
11
|
+
route "api_for '/apidoc'"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<% if namespaced? -%>
|
|
2
|
+
require_dependency "<%= namespaced_path %>/application_controller"
|
|
3
|
+
|
|
4
|
+
<% end -%>
|
|
5
|
+
<% module_namespacing do -%>
|
|
6
|
+
class <%= class_name %>Controller < Lina::ApplicationController
|
|
7
|
+
<% actions.each do |action| -%>
|
|
8
|
+
define_action :<%= action %>, {
|
|
9
|
+
name: '<%= action %>',
|
|
10
|
+
description: '',
|
|
11
|
+
params: {
|
|
12
|
+
type: 'object',
|
|
13
|
+
required: [],
|
|
14
|
+
properties: {
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
return: {
|
|
18
|
+
}
|
|
19
|
+
} do
|
|
20
|
+
# write code here, It's the same as before
|
|
21
|
+
end
|
|
22
|
+
<%= "\n" unless action == actions.last -%>
|
|
23
|
+
<% end -%>
|
|
24
|
+
end
|
|
25
|
+
<% end -%>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# lina config file
|
|
2
|
+
Lina.setup do |config|
|
|
3
|
+
#是否自动生成 views
|
|
4
|
+
#config.generate_views = true
|
|
5
|
+
|
|
6
|
+
#是否开启入口参数校验
|
|
7
|
+
#config.params_check = true
|
|
8
|
+
|
|
9
|
+
#入口参数校验时使用的 json schema 版本, 更多: http://tools.ietf.org/html/draft-zyp-json-schema-04
|
|
10
|
+
#config.params_json_schema_version = :v4
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
#是否开启返回值参数校验
|
|
14
|
+
#config.return_check = true
|
|
15
|
+
|
|
16
|
+
#返回值校验时使用的 json schema 版本, 更多: http://tools.ietf.org/html/draft-zyp-json-schema-04
|
|
17
|
+
#config.return_json_schema_version = :v4
|
|
18
|
+
end
|
data/lib/lina/engine.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Lina
|
|
2
|
+
class Engine < ::Rails::Engine
|
|
3
|
+
isolate_namespace Lina
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def self.setup
|
|
7
|
+
yield self
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
mattr_accessor :generate_views
|
|
11
|
+
@@generate_views = true
|
|
12
|
+
|
|
13
|
+
mattr_accessor :params_check
|
|
14
|
+
@@params_check = true
|
|
15
|
+
|
|
16
|
+
mattr_accessor :params_json_schema_version
|
|
17
|
+
@@params_json_schema_version = :v4
|
|
18
|
+
|
|
19
|
+
mattr_accessor :return_check
|
|
20
|
+
@@return_check = true
|
|
21
|
+
|
|
22
|
+
mattr_accessor :return_json_schema_version
|
|
23
|
+
@@return_json_schema_version = :v4
|
|
24
|
+
end
|
data/lib/lina/error.rb
ADDED
data/lib/lina/schema.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Lina
|
|
2
|
+
class Schema
|
|
3
|
+
def self.argument
|
|
4
|
+
{
|
|
5
|
+
type: "object",
|
|
6
|
+
required: ['name', 'params', 'return'],
|
|
7
|
+
properties: {
|
|
8
|
+
name: {
|
|
9
|
+
type: "string",
|
|
10
|
+
description: "api name"
|
|
11
|
+
},
|
|
12
|
+
description: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
},
|
|
15
|
+
params: {
|
|
16
|
+
type: "object",
|
|
17
|
+
},
|
|
18
|
+
return: {
|
|
19
|
+
type: "object",
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.params_validator(params)
|
|
26
|
+
{
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: params
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Validator
|
|
34
|
+
def self.params_check(schema, data)
|
|
35
|
+
return unless Lina.params_check
|
|
36
|
+
begin
|
|
37
|
+
JSON::Validator.validate!(schema, data)
|
|
38
|
+
rescue JSON::Schema::ValidationError => e
|
|
39
|
+
raise Lina::ParamsCheckError, e.message
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.return_check(schema, data)
|
|
44
|
+
return unless Lina.return_check
|
|
45
|
+
begin
|
|
46
|
+
JSON::Validator.validate!(schema, data)
|
|
47
|
+
rescue JSON::Schema::ValidationError => e
|
|
48
|
+
raise Lina::ReturnCheckError, e.message
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.api_spec_check(schema, data)
|
|
53
|
+
begin
|
|
54
|
+
JSON::Validator.validate!(schema, data)
|
|
55
|
+
rescue JSON::Schema::ValidationError => e
|
|
56
|
+
raise Lina::ApiSpecError, e.message
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end # end of class Validator
|
|
60
|
+
|
|
61
|
+
end
|
data/lib/lina/tree.rb
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
module Lina
|
|
2
|
+
class Tree
|
|
3
|
+
attr_reader :root
|
|
4
|
+
def initialize(routes)
|
|
5
|
+
@routes = routes
|
|
6
|
+
@size = 0
|
|
7
|
+
@root = paths_to_tree
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def to_tree
|
|
11
|
+
ret = []
|
|
12
|
+
@root.children.each do |child|
|
|
13
|
+
ret << _to_tree(child)
|
|
14
|
+
end
|
|
15
|
+
ret
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def _to_tree(root)
|
|
19
|
+
ret = {}
|
|
20
|
+
ret[:label] = root.path
|
|
21
|
+
ret[:values] = root.values
|
|
22
|
+
if ! root.children.empty?
|
|
23
|
+
ret[:children] = root.children.collect { |child| _to_tree(child) }
|
|
24
|
+
end
|
|
25
|
+
ret
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.parse(routes)
|
|
29
|
+
self.new(routes).to_tree
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def size
|
|
33
|
+
@size
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def paths_to_tree
|
|
37
|
+
tree = TreeNode.new('/')
|
|
38
|
+
@routes.each do |route|
|
|
39
|
+
paths = route[:path].split("/")
|
|
40
|
+
paths.shift
|
|
41
|
+
paths_insert_tree(paths, tree, route)
|
|
42
|
+
end
|
|
43
|
+
tree
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def paths_insert_tree(paths, tree, route)
|
|
47
|
+
if paths.empty?
|
|
48
|
+
@size += 1
|
|
49
|
+
tree.add_value(route)
|
|
50
|
+
return
|
|
51
|
+
end
|
|
52
|
+
paths = paths.dup
|
|
53
|
+
path = paths.shift
|
|
54
|
+
path = path.gsub('(.:format)', '')
|
|
55
|
+
|
|
56
|
+
endpoint = tree.find_child(path)
|
|
57
|
+
if endpoint
|
|
58
|
+
paths_insert_tree(paths, endpoint, route)
|
|
59
|
+
else
|
|
60
|
+
child = TreeNode.new(path, tree)
|
|
61
|
+
tree.add_child(child)
|
|
62
|
+
paths_insert_tree(paths, child, route)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
class TreeNode # :nodoc:
|
|
68
|
+
attr_reader :path, :children, :parent, :values
|
|
69
|
+
def initialize(path, parent =nil)
|
|
70
|
+
@path = path
|
|
71
|
+
@children = []
|
|
72
|
+
@parent = parent
|
|
73
|
+
@values = []
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def add_value(value)
|
|
77
|
+
@values << value
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def real_path
|
|
81
|
+
ret_path = [ @path ]
|
|
82
|
+
node = self
|
|
83
|
+
while(node = node.parent)
|
|
84
|
+
ret_path.unshift(node.path)
|
|
85
|
+
end
|
|
86
|
+
ret_path.join('/')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def root?
|
|
90
|
+
@parent.nil?
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def add_child(child)
|
|
94
|
+
@children << child
|
|
95
|
+
child
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def find_child(path)
|
|
99
|
+
@children.find { |child| child.path == path }
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
data/lib/lina/version.rb
ADDED