[ARVADOS] updated: 17c73c85f302fca9a1b426f9105dd999ad465f28

git at public.curoverse.com git at public.curoverse.com
Fri May 9 14:45:47 EDT 2014


Summary of changes:
 .gitignore                                         |   2 +
 apps/workbench/.gitignore                          |   3 +
 apps/workbench/Gemfile                             |   5 +
 apps/workbench/Gemfile.lock                        |  90 ++--
 .../app/assets/javascripts/application.js          |   1 -
 apps/workbench/app/assets/javascripts/editable.js  |  55 +-
 apps/workbench/app/assets/javascripts/folders.js   |  12 +
 ..._authorizations.js.coffee => folders.js.coffee} |   0
 .../app/assets/javascripts/keep_disks.js.coffee    |  29 +
 apps/workbench/app/assets/javascripts/selection.js |  18 +-
 apps/workbench/app/assets/javascripts/sizing.js    |   2 +-
 .../app/assets/stylesheets/application.css.scss    |  72 +--
 .../app/assets/stylesheets/cards.css.scss          |  85 +++
 .../{jobs.css.scss => folders.css.scss}            |   2 +-
 .../app/assets/stylesheets/keep_disks.css.scss     |   8 +
 .../app/assets/stylesheets/sb-admin.css.scss       | 164 ++++++
 .../workbench/app/assets/stylesheets/selection.css |  22 +-
 .../app/controllers/actions_controller.rb          |  42 +-
 .../api_client_authorizations_controller.rb        |   2 +-
 .../app/controllers/application_controller.rb      | 132 +++--
 .../app/controllers/collections_controller.rb      |  77 ++-
 .../app/controllers/folders_controller.rb          |  99 ++++
 .../workbench/app/controllers/groups_controller.rb |   7 +-
 .../app/controllers/keep_disks_controller.rb       |  47 ++
 apps/workbench/app/helpers/application_helper.rb   |  21 +-
 apps/workbench/app/helpers/folders_helper.rb       |   2 +
 .../app/helpers/pipeline_instances_helper.rb       |   1 -
 apps/workbench/app/models/arvados_api_client.rb    |  26 +-
 apps/workbench/app/models/arvados_base.rb          |  48 +-
 apps/workbench/app/models/arvados_resource_list.rb |  42 +-
 apps/workbench/app/models/collection.rb            |   5 +
 apps/workbench/app/models/group.rb                 |  20 +-
 apps/workbench/app/models/log.rb                   |   5 +
 apps/workbench/app/models/pipeline_instance.rb     |   2 +-
 apps/workbench/app/models/user.rb                  |   5 -
 .../app/views/application/_content.html.erb        |   2 +-
 .../application/_delete_object_button.html.erb     |   2 +-
 .../app/views/application/_show_metadata.html.erb  |   4 +-
 .../views/application/_show_object_button.html.erb |   3 +
 .../app/views/application/_show_recent.html.erb    |  21 +-
 .../workbench/app/views/application/index.html.erb |   6 +-
 .../app/views/folders/_show_my_folders.html.erb    |   2 +
 .../views/folders/_show_shared_with_me.html.erb    |   2 +
 .../workbench/app/views/folders/remove_item.js.erb |   5 +
 apps/workbench/app/views/folders/show.html.erb     | 193 +++++++
 .../app/views/keep_disks/_content_layout.html.erb  |  21 +
 .../app/views/layouts/application.html.erb         | 321 +++++------
 apps/workbench/app/views/logs/show.html.erb        |   1 -
 apps/workbench/app/views/users/_tables.html.erb    |   2 +-
 apps/workbench/config/routes.rb                    |   3 +
 .../test/functional/collections_controller_test.rb | 130 +++++
 .../folders_controller_test.rb}                    |   2 +-
 .../workbench/test/integration/collections_test.rb |   9 +
 apps/workbench/test/integration/folders_test.rb    |  48 ++
 apps/workbench/test/integration/smoke_test.rb      |   2 +-
 apps/workbench/test/integration/users_test.rb      |  51 +-
 .../test/integration/virtual_machines_test.rb      |   4 +-
 apps/workbench/test/integration_helper.rb          |  26 +
 apps/workbench/test/test_helper.rb                 |  41 +-
 .../test/unit/arvados_resource_list_test.rb        |  55 ++
 apps/workbench/test/unit/group_test.rb             |  29 +-
 .../test/unit/helpers/folders_helper_test.rb       |   4 +
 apps/workbench/test/unit/user_test.rb              |  12 -
 doc/_config.yml                                    |   5 +-
 doc/api/index.html.textile.liquid                  |   2 -
 doc/api/methods.html.textile.liquid                |  39 +-
 doc/api/methods/groups.html.textile.liquid         |  26 +-
 doc/api/methods/logs.html.textile.liquid           |  22 +-
 doc/api/methods/users.html.textile.liquid          |  12 -
 doc/api/schema/Collection.html.textile.liquid      |   2 +-
 doc/api/schema/Job.html.textile.liquid             |   1 +
 doc/install/client.html.textile.liquid             |  43 +-
 doc/install/index.html.md.liquid                   |  18 -
 doc/install/index.html.textile.liquid              |  18 +
 doc/install/install-api-server.html.textile.liquid |   5 +-
 .../install-crunch-dispatch.html.textile.liquid    |  44 +-
 doc/install/install-sso.html.textile.liquid        |   3 +-
 .../install-workbench-app.html.textile.liquid      |  30 +-
 doc/sdk/index.html.textile.liquid                  |   3 +-
 doc/sdk/java/index.html.textile.liquid             | 140 +++++
 doc/sdk/perl/index.html.textile.liquid             |   2 +-
 doc/sdk/python/sdk-python.html.textile.liquid      |  15 +-
 doc/sdk/ruby/index.html.textile.liquid             |   2 +-
 docker/build_tools/Makefile                        |  10 +
 docker/jobs/Dockerfile                             |  20 +
 sdk/cli/bin/arv-run-pipeline-instance              |  44 +-
 sdk/cli/bin/crunch-job                             |  70 ++-
 sdk/cli/test/test_arv-run-pipeline-instance.rb     |  33 ++
 sdk/java/.classpath                                |  21 +
 sdk/java/.project                                  |  14 +
 sdk/java/.settings/org.eclipse.jdt.core.prefs      |   5 +
 sdk/java/ArvadosSDKJavaExample.java                |  80 +++
 sdk/java/ArvadosSDKJavaExampleWithPrompt.java      | 123 +++++
 sdk/java/README                                    |   4 +
 sdk/java/pom.xml                                   | 106 ++++
 .../main/java/org/arvados/sdk/java/Arvados.java    | 403 ++++++++++++++
 .../java/org/arvados/sdk/java/MethodDetails.java   |  22 +
 sdk/java/src/main/resources/log4j.properties       |  11 +
 .../java/org/arvados/sdk/java/ArvadosTest.java     | 420 +++++++++++++++
 sdk/java/src/test/resources/first_pipeline.json    |  16 +
 sdk/python/.gitignore                              |   1 -
 sdk/python/MANIFEST.in                             |   1 +
 sdk/python/arvados/api.py                          |   7 +-
 sdk/python/arvados/events.py                       |  33 ++
 sdk/python/arvados/fuse.py                         | 317 -----------
 sdk/python/arvados/fuse/__init__.py                | 585 +++++++++++++++++++++
 sdk/python/bin/arv-mount                           |  51 +-
 sdk/python/build.sh                                |  16 -
 sdk/python/requirements.txt                        |   3 +
 sdk/python/run_test_server.py                      | 212 ++++++++
 sdk/python/{setup.py.src => setup.py}              |   9 +-
 sdk/python/setup.py.src                            |   8 +-
 sdk/python/setup_fuse.py                           |  21 +
 sdk/python/setup_header.py                         |  19 +
 sdk/python/test_keep_client.py                     |  23 +-
 sdk/python/test_mount.py                           | 247 +++++++--
 sdk/python/test_pipeline_template.py               |  18 +-
 sdk/python/test_websockets.py                      |  32 ++
 sdk/ruby/.gitignore                                |   1 +
 sdk/ruby/Gemfile.lock                              |  58 --
 services/api/.gitignore                            |   2 +
 services/api/Gemfile                               |   9 +-
 services/api/Gemfile.lock                          |  14 +-
 services/api/Rakefile                              |   6 +
 .../api/app/controllers/application_controller.rb  |  75 +--
 .../controllers/arvados/v1/groups_controller.rb    |  68 +++
 .../controllers/arvados/v1/schema_controller.rb    |  15 +-
 .../app/controllers/user_sessions_controller.rb    |   3 +-
 services/api/app/models/arvados_model.rb           | 124 +++--
 services/api/app/models/group.rb                   |   1 +
 services/api/app/models/link.rb                    |  11 +
 services/api/app/models/node.rb                    |   2 +-
 services/api/app/models/pipeline_instance.rb       |  89 ++--
 services/api/app/models/user.rb                    |   4 +
 services/api/config/application.default.yml        |  10 +
 services/api/config/application.yml.example        |   7 -
 services/api/config/initializers/eventbus.rb       |   6 +-
 services/api/config/routes.rb                      |   3 +-
 ...0140501165548_add_unique_name_index_to_links.rb |  13 +
 services/api/db/schema.rb                          |   6 +-
 services/api/lib/current_api_client.rb             |   4 +-
 services/api/lib/load_param.rb                     |   2 +-
 services/api/lib/record_filters.rb                 |  13 +-
 services/api/script/import_commits.rb              |   9 -
 services/api/test/fixtures/api_clients.yml         |   2 +
 services/api/test/fixtures/groups.yml              |  22 +-
 services/api/test/fixtures/links.yml               |  68 ++-
 services/api/test/fixtures/pipeline_instances.yml  |   3 +
 services/api/test/fixtures/repositories.yml        |   4 +-
 services/api/test/fixtures/specimens.yml           |  30 +-
 .../arvados/v1/groups_controller_test.rb           | 129 ++++-
 .../functional/arvados/v1/jobs_controller_test.rb  |  34 ++
 .../functional/arvados/v1/links_controller_test.rb |  13 +
 .../functional/arvados/v1/users_controller_test.rb |  76 ---
 .../api/test/integration/user_sessions_test.rb     |  28 +
 services/api/test/test_helper.rb                   |  21 +
 services/api/test/unit/group_test.rb               |  61 ++-
 services/api/test/unit/link_test.rb                |  47 +-
 services/api/test/unit/pipeline_instance_test.rb   |  26 +-
 services/keep/src/keep/perms.go                    | 104 ++++
 services/keep/src/keep/perms_test.go               | 104 ++++
 161 files changed, 5561 insertions(+), 1357 deletions(-)
 create mode 100644 apps/workbench/app/assets/javascripts/folders.js
 copy apps/workbench/app/assets/javascripts/{api_client_authorizations.js.coffee => folders.js.coffee} (100%)
 create mode 100644 apps/workbench/app/assets/stylesheets/cards.css.scss
 copy apps/workbench/app/assets/stylesheets/{jobs.css.scss => folders.css.scss} (64%)
 create mode 100644 apps/workbench/app/assets/stylesheets/sb-admin.css.scss
 create mode 100644 apps/workbench/app/controllers/folders_controller.rb
 create mode 100644 apps/workbench/app/helpers/folders_helper.rb
 create mode 100644 apps/workbench/app/views/application/_show_object_button.html.erb
 create mode 100644 apps/workbench/app/views/folders/_show_my_folders.html.erb
 create mode 100644 apps/workbench/app/views/folders/_show_shared_with_me.html.erb
 create mode 100644 apps/workbench/app/views/folders/remove_item.js.erb
 create mode 100644 apps/workbench/app/views/folders/show.html.erb
 create mode 100644 apps/workbench/app/views/keep_disks/_content_layout.html.erb
 delete mode 100644 apps/workbench/app/views/logs/show.html.erb
 copy apps/workbench/test/{unit/job_task_test.rb => functional/folders_controller_test.rb} (57%)
 create mode 100644 apps/workbench/test/integration/folders_test.rb
 create mode 100644 apps/workbench/test/unit/arvados_resource_list_test.rb
 create mode 100644 apps/workbench/test/unit/helpers/folders_helper_test.rb
 delete mode 100644 doc/install/index.html.md.liquid
 create mode 100644 doc/install/index.html.textile.liquid
 create mode 100644 doc/sdk/java/index.html.textile.liquid
 create mode 100644 docker/jobs/Dockerfile
 create mode 100644 sdk/cli/test/test_arv-run-pipeline-instance.rb
 create mode 100644 sdk/java/.classpath
 create mode 100644 sdk/java/.project
 create mode 100644 sdk/java/.settings/org.eclipse.jdt.core.prefs
 create mode 100644 sdk/java/ArvadosSDKJavaExample.java
 create mode 100644 sdk/java/ArvadosSDKJavaExampleWithPrompt.java
 create mode 100644 sdk/java/README
 create mode 100644 sdk/java/pom.xml
 create mode 100644 sdk/java/src/main/java/org/arvados/sdk/java/Arvados.java
 create mode 100644 sdk/java/src/main/java/org/arvados/sdk/java/MethodDetails.java
 create mode 100644 sdk/java/src/main/resources/log4j.properties
 create mode 100644 sdk/java/src/test/java/org/arvados/sdk/java/ArvadosTest.java
 create mode 100644 sdk/java/src/test/resources/first_pipeline.json
 create mode 100644 sdk/python/MANIFEST.in
 create mode 100644 sdk/python/arvados/events.py
 delete mode 100644 sdk/python/arvados/fuse.py
 create mode 100644 sdk/python/arvados/fuse/__init__.py
 delete mode 100755 sdk/python/build.sh
 create mode 100644 sdk/python/run_test_server.py
 copy sdk/python/{setup.py.src => setup.py} (82%)
 create mode 100644 sdk/python/setup_fuse.py
 create mode 100644 sdk/python/setup_header.py
 create mode 100644 sdk/python/test_websockets.py
 delete mode 100644 sdk/ruby/Gemfile.lock
 create mode 100644 services/api/db/migrate/20140501165548_add_unique_name_index_to_links.rb
 delete mode 100755 services/api/script/import_commits.rb
 create mode 100644 services/api/test/integration/user_sessions_test.rb
 create mode 100644 services/keep/src/keep/perms.go
 create mode 100644 services/keep/src/keep/perms_test.go

       via  17c73c85f302fca9a1b426f9105dd999ad465f28 (commit)
       via  568d941d3fe4bc554af0bca6c1dc4d9fc66ce999 (commit)
       via  179c431787943f3711f2127d127c33a831378b06 (commit)
       via  4556f61d8f4ec294afa7980d1b00882e2a1ffdfa (commit)
       via  dc068f04e966c35eee87af8da280bbbeb9ba3595 (commit)
       via  8fa8b34bcc334388d8c885e3f0e192503fdb7616 (commit)
       via  1ca9c477ffa476305a920a0df7ae1e8d5b69c8b2 (commit)
       via  bfd037dee4c82f355816c449dd25921fc2923837 (commit)
       via  ef47dfeb871015d9da6d5e2e0a04100c2e9e8eee (commit)
       via  383aa9f906c32876a71599024084283627070adb (commit)
       via  f990e6880050eafaf3b6bfd063e36aa016e8682a (commit)
       via  28fe4303b1c04142bf0939b05280749e590673f0 (commit)
       via  f900ccf514a3653a64002fe07d9ce5b16adcfd51 (commit)
       via  a87ad3026e4f7e1cc2e22082a523fa7143388c88 (commit)
       via  b2a8e117cd2a02851c69136f76a1e63005386f1d (commit)
       via  97d8fa64264069fe6d8ae6c8131fd3cc2f347189 (commit)
       via  c501af3c5d3216c2ca56ab77f4f05bd74198c622 (commit)
       via  5a977746e6df04e3ce1578299e98ed7ec645fcdd (commit)
       via  0c1af8806516569044c7354ff58f7371a510594d (commit)
       via  16af0b22def5b80a1861788907a2fc45b14e3273 (commit)
       via  15945ebab4fc71980b2c6ddceb149a3d7365c29e (commit)
       via  a9eaabb02fe7110f0e16bcd7f27d1a0cd5eab08b (commit)
       via  3aaf11c2dd372b5d34ba317a1a4b761d263f86d6 (commit)
       via  eed7af8f901adb263c870a2277ec166467a28d77 (commit)
       via  d97e3de81c48673b0e1d3927edaaf0e560a9a2ba (commit)
       via  14c312c452e0e010d617c02a33b94a178632ac26 (commit)
       via  5c3c04ad25cfabaa860bb0ea3f3dc078a9562008 (commit)
       via  5e968d7875c62a6145b7aefc39f070d14f4c97e8 (commit)
       via  eff3277fa6800bbc4ac81654f8883bbfd3a85d30 (commit)
       via  002f863605469cee7e112f4c16a78e3b6278672c (commit)
       via  6c2a704b7a2d721087976b2b8ec4f22cdaf44178 (commit)
       via  cdf7b162906cb37d4ecf88ff6c72433bcdd8fc84 (commit)
       via  722862465129f1f30cbb2432132140883d31b4ca (commit)
       via  27fa0d391eb95008acf41ba207bc13b8c4fe794c (commit)
       via  f7f61eca36d66a723b02ac34db888f5fbdc63fc8 (commit)
       via  2de827e57ae9ba1b0d322199d071ae900a5b7e0c (commit)
       via  d9aa5decc6edce30285df049277de2cf2c138c26 (commit)
       via  222ce386e36b3d146e718a5d2f64a95fb30996bb (commit)
       via  26d69329e87e343b84a132a4754068aca66ad132 (commit)
       via  036a701b45399e0114eed5b0e1ce6b478c614534 (commit)
       via  b4516edf0a7cd1b584442953a8c965fc65104906 (commit)
       via  a3cd0039e84373541d6648b76647457be5a7e098 (commit)
       via  8fcba3783d9a79bb18a00d339f9b3222f1eccd7f (commit)
       via  1c6bc4bcac86195a120e6be564703e7d2133dbe7 (commit)
       via  71143e41dbc8755d5ccb97990525bbb05aad69e9 (commit)
       via  31c711afc4ff8a1728aeb3e5f405a131047671c9 (commit)
       via  88590483c4d24904267b550cbb3af7d5a11d8953 (commit)
       via  5b252752cdfd8b129d10913f7e2ec7b47f544ead (commit)
       via  2376147b3d039acf08456a53015d59f04eabbf82 (commit)
       via  fde1e4f00e82c7a776892c1ab9c5edacf05dc1c3 (commit)
       via  97252f1f34486073c778c0a1c9de25f2f275cacd (commit)
       via  ff6a6fb89b42d17693786be6405c267bee445c4d (commit)
       via  7fb83a3380e62721801a4980c48ba78208c7b2e2 (commit)
       via  45938e41f983ce41d8b55c3f980b7f31bc269124 (commit)
       via  f91c73aba940adf1e9fbd530d102931af45a63c5 (commit)
       via  11b48e1b182cef419918d4df1a4998001d665a9a (commit)
       via  d70ff3d064c9a6da8b8678b249abf7f4b93b6370 (commit)
       via  1d5b46697b5d7c68b0bb159fc570ed63c1e3acc3 (commit)
       via  9736526e7abfd50eb8f18293f8ac312bf61937e4 (commit)
       via  52a3016af3ff21b8fb5402bf70d0aab07f5ee486 (commit)
       via  69141a18be1821daf4816046e65b2aea75a975be (commit)
       via  e65b2e685833e1d850c8d671fd1df9d4e4fea4a3 (commit)
       via  fdbea9e3c225a3184f8f7c2fac52abde643603c6 (commit)
       via  a04d67ef0823d6c87e8515cfe6cf88793ef5e3bb (commit)
       via  df2ce01533175ff7190a5d13fdca4b61f22befd3 (commit)
       via  638d136057f4d9ed19f132075079da396217d6fd (commit)
       via  f493dd4dfab89c228fab05e2b46851211c7fc586 (commit)
       via  ba764a7a0878b9cf0dd8d22ad4e12774d8e5f550 (commit)
       via  facf07110e28fe552342fbad623d621b43e22b99 (commit)
       via  6f3853aef989e8c2243159bbf0ea352948ae4878 (commit)
       via  67b4630e47e0f70e3cdbcaa8a7d039543e3c6a34 (commit)
       via  7e049a91425a51398f38e6b1ee839a4070483267 (commit)
       via  b2979b0db0b6b5ee7ad3001ffcc8f76ff4d96f05 (commit)
       via  733269172b6b9802c2a00a8f8d19d6a520546a67 (commit)
       via  a2104e385abe47470dd42836a66360bf62afa57b (commit)
       via  17b0eecaa5dd1e0ac006b6ba757f6aee251a139e (commit)
       via  f45ce8083a98e29720cfba01e8043f6465327c40 (commit)
       via  7276cc563eb93589279f58b045f893a7c3b83835 (commit)
       via  fc4428224984cb71b961d17410205b535153c7f2 (commit)
       via  385ce6601ff872a0a4124071ef39869a4d3cfd53 (commit)
       via  32ca1dc4da9100a1a698d33a46c2919cf53fe606 (commit)
       via  a848b6ea430ee2b2c1daee80e846d4d3bd594920 (commit)
       via  35fb8a1cd59d1dc0ad4be89c64e8b48c750faaeb (commit)
       via  0ab985ff1da223e4065273fd1a549284ff3454ee (commit)
       via  e6aa5b48be1209d74c4c69be3eeca549f02418f3 (commit)
       via  2e524eb008f8b70ca1263ccde460365109c66a90 (commit)
       via  3ac9fd0c91fe202a59e7c3611156bb1a9b8118fe (commit)
       via  01436e8b76300759ef4bfea30d7798445d50bf60 (commit)
       via  eee2c981d6a29eb7f15b8957570bbf8515d3d947 (commit)
       via  b5f193aa657134822d4df67cabc25c631926395b (commit)
       via  ff1e29f702d4f3036f5af014ad6e423b886ed0bb (commit)
       via  f8ba79b88683be984913e28677c4522ca21019aa (commit)
       via  66f1ae7a9be590461592199c6d3646dbc4eba786 (commit)
       via  4bd14ccfa216fe1d115772508ac7d7c64ec59a48 (commit)
       via  16c58b75712ad4332d55e490d20b3946d2e05008 (commit)
       via  722e0c17507cc1fd21df7fafa43cc88965c092d8 (commit)
       via  79f70f03efbfca59ea80b344e56aa29ac1e72c47 (commit)
       via  1b1ddccffecf6e3d44aa2e1a632b54601ce282b6 (commit)
       via  aa0e6250280b5ac587b816f92127bae079d62dbc (commit)
       via  db1e389b74e37ecf4915168acdc72ea9ef624d9c (commit)
       via  43bcfeaa2d9953ff03f34c65b95be9e386152362 (commit)
       via  06c00e72091d7c058cbc607ed863a9444d26156c (commit)
       via  1b8120689041941db937883c3132a9c6819b56c5 (commit)
       via  7fc412308bcb4d853e6f9aeb9e7d45e5ab76b11f (commit)
       via  58242491cbdb85f19342a2ca04b499b9bed98a2d (commit)
       via  5845d196105cc4676847695833b7ef3658c8a180 (commit)
       via  d8de76141cbe9a9af10dfc408b6d656cc727bbe5 (commit)
       via  6b21bd450e8b8ed968a965290e641a75660cd695 (commit)
       via  cbf0429a8a5edd2f8a8d9b01ce39334e07e56bf8 (commit)
       via  121fb6bdcdf3731903ce3d21c0a284c20e6a6fca (commit)
       via  7871e324112f24527031f4100e4131ff2c6ab245 (commit)
       via  8370640cef5110b65ba6c3a2bf9d7f56541b4c7f (commit)
       via  e76d4b556f07bbeab0998ca0332dad187bb119ee (commit)
       via  5af51b564ca9d805f8e61b4bb3c37ed813b3bd16 (commit)
       via  6abcf1f6bdb82b176a9fbb48b6c7cefa64970a9d (commit)
       via  8dbf8bd4d53c200ca81494556326c03abae74581 (commit)
       via  3398985fa7f0997c225b55efaa97dc000a8234fa (commit)
       via  5ab27a2c4889609669f6b04bd9dfd2e403e43441 (commit)
       via  256142bddd532e2834b4e7f79c3146009e23059e (commit)
       via  c47ada5e06a91a0283bd779d17ad7e6403e1c223 (commit)
       via  8624ad6e91ed73876bd4f12fe8df2387e3e6330e (commit)
       via  77f1f9eb6f2d03b53c0bb4567ef07718b934e8ea (commit)
       via  395b4e72d33c5b4df931c029a45870d354c32312 (commit)
       via  cbcb69fcbf73a1bde0ae78be8c0ad25f84c3f7c3 (commit)
       via  611223d58fcdf5cc6ba434efed2c1ee9234b29a7 (commit)
       via  c6c3d3d23d1cca50381570d0558470d47e71fd95 (commit)
       via  2b03b05de753509c026b4c67857cd49a11f44dcf (commit)
       via  c52a78b386adeebf33c618b669f33ca87c466eee (commit)
       via  3e9576ef93a4d86882147b34ef9a28016375b865 (commit)
       via  546687a7c95109a57efdf7cecbc3f795bc3e72f1 (commit)
       via  ec56622b42f85aef2b4e8811378f8c99a6df24ea (commit)
       via  c6ad75e4241247ac18f5a5a8c397537dc6be1e3c (commit)
       via  02b233b2eb80de1b234f3658d86a0e446e33a032 (commit)
       via  428abec08e6ec59c38b7dc640396db950d42702b (commit)
       via  6ada98b925a7b82a87446aacd0f6cca28df1b510 (commit)
       via  11c6f1d759040f2af8a68d80ae78dd57a9b2d976 (commit)
       via  ccdaeb4b5b55c0e97e4fccc21445e5b9cc53dbe2 (commit)
       via  17d83fff53eea039e1483f86efd4a66056fed647 (commit)
       via  67fef1f4bec2d314c9d37bb05c55ff1067ba7b49 (commit)
       via  a998a520deb859216271567f1bf3623f310cf2d6 (commit)
       via  51928265eaf8ca6b6319dd231d74604ceb3af287 (commit)
       via  181fead894b660893e0e09274e609ec8ee4230a1 (commit)
       via  51af13e97bc4725e8cc010c72bbedb667b0a0e0f (commit)
       via  e9359f96365d629a688cbbc2f7d063fabf535a9f (commit)
       via  228f1ecbb98438fcd5bbe59465c830be637d38ce (commit)
       via  ee056b0ceb9ce569e0ee9a64b41ead728636772a (commit)
       via  3e237c89424489bad02cde9be33f715269e0c6b8 (commit)
       via  00ba956a67072f8b4a77fe71d3dc1e4dd8f70e98 (commit)
       via  76e20e694fbe708e17e57a2e0b1c36aca6e8d7d0 (commit)
       via  4e05647f7a5b3971771c5a928634c6b2a41aa591 (commit)
       via  98fd371d846022d8ccc25e8234d913e436ecce69 (commit)
       via  9c444153e80d3a872e11ca5898491c747a881a4d (commit)
       via  0f7fa46c1311ddd2aa6e7f0c280b98a6d69d4ec8 (commit)
       via  2e04dd8e9f872506922744dd449cccb99b55a847 (commit)
       via  752bd0d292c7fd6eb55b39cdc9d7373c7f35e0ec (commit)
       via  67c754c065dbe79e14a3c60640e6e604af32d0bd (commit)
       via  77c4def0b319e3720dba05a3c1fb0ab78323f227 (commit)
       via  65c155b7f691ce6a885125618bde3c9d68f6b47e (commit)
       via  d433ba0f548414219b3d976125e1ea530e1ba9ef (commit)
       via  d17ef1d036b4262f6c6c40324cc56d04d26581d3 (commit)
       via  c436da861845723ab18f56dba96052cf2569e539 (commit)
       via  6a7ffd91ec95950588b95d3f29599d07d8447c16 (commit)
       via  f263c987ad0b144393edd28f281c5b19e84fdf0b (commit)
       via  22233bfa18060d000e303d7734ec3016f7e80c8e (commit)
       via  ebddfbe7fbca80ecf852bbb20af9c6b584394691 (commit)
       via  10d03fd3b09ec9f2eaea62cc665a1022f3744b89 (commit)
       via  3ea6744bcf9cc4812ab24913286c3bc8e123b76a (commit)
       via  af3a38d81374f70d15134813563b7371e8e4127c (commit)
       via  8c5b4f6d87cec17f915802e3c5f14695611eba7f (commit)
       via  603bccd66ac868c2accf9dff9c3ca6b7feeed962 (commit)
       via  b8dc9c22c0a76b5ed8b36a42d06c45bd3069b6f5 (commit)
       via  a8fd97bee8b0d194a7013dffa0c8bfb8533e669b (commit)
       via  1f763a5b1ad5c65a3265b4284958ecc0fe336f50 (commit)
       via  aeff59bfaf199eec6884ccf3ff60968bec81f581 (commit)
       via  8023ae393e2c9ce115bf67bbcf632798a3d17b87 (commit)
       via  20cbe1178d370b71e7df2650afa7d6dc7e8c73b8 (commit)
       via  9143c3ec039d6c89512055f70c2fcc6e1065f1d7 (commit)
       via  4b9281d9e47bf308d229ca4dde8af499a6674c9c (commit)
       via  415347a3354031b48c22cae56c7bbfdcb76d607c (commit)
       via  a8918e636507200148758302dc6b9a081dc2f206 (commit)
       via  7f3b351ccea1beee195c1176be229ffa6d104d3e (commit)
       via  bcc477ed88c04b3200a70d16f1fc99da11c670f8 (commit)
       via  c19ef999c3b938e6d3cdc3746fab5bad8aba3403 (commit)
       via  c8444a1f49cb77bc32f62135247f12301f4927d7 (commit)
       via  70fa68ef9087dd85d6e18fba2ef11f94ddeb95a4 (commit)
       via  4aee1d7246e344099fe7e10264d009e49aeafee0 (commit)
       via  2bb2789ff129b4112d81ba343fadfb7ad362ecd1 (commit)
       via  d02c4efcfdbe8f21fba895749988b14b7db41310 (commit)
       via  1c9ae7e8c8d7920602250958333751b769fb3a72 (commit)
       via  b93c1cd880d8367d11bd3fd7574e55f4545a34c5 (commit)
       via  ccce5e8ad71ed2e50ecd57c0f73f1aaafc468539 (commit)
       via  70fddd1f7cacaa0db92b3b76a0baeeddf6f0d9b6 (commit)
       via  83dcc2c95eeb38c6b0f6f7509338aa729f14d762 (commit)
       via  3bd5f6c3f353059c15eeea51b16b2fdee694d504 (commit)
       via  6a53a3c5d97d33586567f8df082a725f7d229327 (commit)
       via  ec824d69dee0696b1ca4748fbe5b912634940d53 (commit)
       via  76b9eebf07b424ec2a8fde9b7760b8ce499063bc (commit)
       via  ac317fea1f11179b33eae7e06a60ba60df218f1c (commit)
       via  568ea04cdde8988a675754372f618d937d3757e0 (commit)
       via  a74ae790b5a0682fa00423626103482c145e1b91 (commit)
       via  66d12ae6dc72d45cc3cb3fcc007cb41371371616 (commit)
       via  fca1b2bd47910761f0c2603e72681670443e4be8 (commit)
       via  4c19fb79d7b96bc18a1843182d3675c7a4de683d (commit)
       via  f23a72b89383c797663b5ec77d342bab20f239f4 (commit)
       via  6177a6474c312d5d5b9c1f0eaa3ebd089a64b5f1 (commit)
       via  9820178bf518d9ddace8c27ea383e5c37d86c8fe (commit)
       via  b7161fff2cb2fdd2bc0975c75f1fbc32f625343b (commit)
       via  5d5c69bb5a60127aa509fac4bdfb8ea915eacadc (commit)
       via  0e69f5346c474da7b2244546db4476f8ca21946f (commit)
       via  3063c6106a83102214deb9d86ec621c0bb85d4b7 (commit)
       via  c623120453858c2ce47ab135f250c33a627a344d (commit)
       via  20347d900fb2d75a3f3eef91d4da17a559b0ecd6 (commit)
       via  da67c81ff6cc5fd540c0725de1c8208c2d8933be (commit)
       via  f107a5232d5e8788ae19daf1c5f6639f0c3cdb68 (commit)
       via  7df1885cee1d6eb0f65a010f13ca7e9ff59c80d9 (commit)
       via  c66afecd36cf7d91223b5db79f3e120954f8217d (commit)
       via  8ee3fe6685a716918a403f559c626c3b38e411f2 (commit)
       via  2e273679fbf3f73ac7b7cfcf9ef8380047e959a0 (commit)
       via  ab5ded7cdf302ad156c58d47f59ab07e3a14ec69 (commit)
       via  abcde4a0bed9e80fc0925e70d151c7893043bc82 (commit)
       via  cc22cd28f536fa6fd95732372177d36a94a4c08d (commit)
       via  c13b9d5300b7f778e2fc05f9d043db4122d15aa1 (commit)
       via  d39470cbc160b9d51033a564e0b8867388a5a1d3 (commit)
       via  1c45ed6a43b01a4f216cf8877b35d9ad18e1c5b5 (commit)
       via  9cfbcdf804974812b1a4ec514f5dc7902fce6137 (commit)
       via  c7fed8bfbd8a0e6edf83142b50bed4fe53c10c5c (commit)
       via  d28bf64e878b8d45e1ace6409e94027a039d3909 (commit)
       via  72493a2fef971fc685ecef42c2b697338da69d2c (commit)
       via  4d1481ed38e238e2e39d37775cb8cd86150bd04e (commit)
       via  c4fcddbe2a01ebbc3a4898dfa8744eb6fc45227e (commit)
       via  84c471b1cfb20116b2d7d26215c2517cb57ba53f (commit)
       via  a5034fccf4a829a36d6e2670a9f62e4f7a545f2f (commit)
       via  72c312b352a88740a44fba9e274d72bbabb489a7 (commit)
       via  ba4693cda66632d3da1a711b6910441958ecee01 (commit)
       via  2e5fef753892523984f18c26fc16cfd599115f34 (commit)
       via  420949e37a2903ab87f64f57278dfdc6a261a7f3 (commit)
       via  34350a8b802a8c48b534673a712614d36a5b97ac (commit)
       via  2943d9c3622e2c5bca081dc48fd5d8d148dac386 (commit)
       via  bd240259a9d95a4da53eb0ff8a3644d7acd7705d (commit)
       via  e35fb48f1485a92a64a30efe8b1c43a179b70260 (commit)
       via  7e8f99556391cc81c014b517a9fa6efed8fe8113 (commit)
       via  2f3e496712802324e5d184f9ae59866df1772ef0 (commit)
       via  bf15373590e21dafd696fa0c10906eb653610d1d (commit)
       via  8086f73aca674d7533e88bdd3850042553487d2b (commit)
       via  8b77f66275fd87f70dd79075a71d8062311541bc (commit)
       via  57dc9e64bb38f186e2b235a98d7437a5f986bc83 (commit)
       via  d7ccebe29c68df51633f6a18eba6aa6a982c3739 (commit)
       via  d649a716392760cd394e18a628dc23aaec5fa3b3 (commit)
       via  50b746d9246c19c1ad2cf506bb18a0eb8ddd0755 (commit)
       via  520d80f58ab4358dfce0233fe6880794c819760c (commit)
       via  f8cc86219281026b2867c543524f8e7fa23da291 (commit)
      from  647c8b8c47ef521046bea7675af84b621c235e0f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 17c73c85f302fca9a1b426f9105dd999ad465f28
Merge: 568d941 647c8b8
Author: Tom Clegg <tom at curoverse.com>
Date:   Fri May 9 14:38:39 2014 -0400

    Merge branch 'master'
    
    Conflicts:
    	apps/workbench/Gemfile.lock
    	apps/workbench/app/controllers/application_controller.rb
    	apps/workbench/app/models/arvados_api_client.rb
    	apps/workbench/app/models/group.rb
    	apps/workbench/app/models/user.rb
    	apps/workbench/app/views/layouts/application.html.erb

diff --cc apps/workbench/Gemfile.lock
index 8e74832,ca9afb1..4cdd3fc
--- a/apps/workbench/Gemfile.lock
+++ b/apps/workbench/Gemfile.lock
@@@ -2,36 -10,33 +10,33 @@@ GE
    remote: https://rubygems.org/
    specs:
      RedCloth (4.2.9)
-     actionmailer (3.2.15)
-       actionpack (= 3.2.15)
 -    actionmailer (4.0.4)
 -      actionpack (= 4.0.4)
++    actionmailer (4.0.5)
++      actionpack (= 4.0.5)
        mail (~> 2.5.4)
-     actionpack (3.2.15)
-       activemodel (= 3.2.15)
-       activesupport (= 3.2.15)
-       builder (~> 3.0.0)
 -    actionpack (4.0.4)
 -      activesupport (= 4.0.4)
++    actionpack (4.0.5)
++      activesupport (= 4.0.5)
+       builder (~> 3.1.0)
        erubis (~> 2.7.0)
-       journey (~> 1.0.4)
-       rack (~> 1.4.5)
-       rack-cache (~> 1.2)
-       rack-test (~> 0.6.1)
-       sprockets (~> 2.2.1)
-     activemodel (3.2.15)
-       activesupport (= 3.2.15)
-       builder (~> 3.0.0)
-     activerecord (3.2.15)
-       activemodel (= 3.2.15)
-       activesupport (= 3.2.15)
-       arel (~> 3.0.2)
-       tzinfo (~> 0.3.29)
-     activeresource (3.2.15)
-       activemodel (= 3.2.15)
-       activesupport (= 3.2.15)
-     activesupport (3.2.15)
-       i18n (~> 0.6, >= 0.6.4)
-       multi_json (~> 1.0)
+       rack (~> 1.5.2)
+       rack-test (~> 0.6.2)
 -    activemodel (4.0.4)
 -      activesupport (= 4.0.4)
++    activemodel (4.0.5)
++      activesupport (= 4.0.5)
+       builder (~> 3.1.0)
 -    activerecord (4.0.4)
 -      activemodel (= 4.0.4)
++    activerecord (4.0.5)
++      activemodel (= 4.0.5)
+       activerecord-deprecated_finders (~> 1.0.2)
 -      activesupport (= 4.0.4)
++      activesupport (= 4.0.5)
+       arel (~> 4.0.0)
+     activerecord-deprecated_finders (1.0.3)
 -    activesupport (4.0.4)
++    activesupport (4.0.5)
+       i18n (~> 0.6, >= 0.6.9)
+       minitest (~> 4.2)
+       multi_json (~> 1.3)
+       thread_safe (~> 0.1)
+       tzinfo (~> 0.3.37)
      andand (1.3.3)
-     arel (3.0.2)
+     arel (4.0.2)
 -    bootstrap-sass (3.1.1.1)
 +    bootstrap-sass (3.1.0.1)
        sass (~> 3.2)
      bootstrap-x-editable-rails (1.5.1.1)
        railties (>= 3.0)
@@@ -48,29 -53,28 +53,28 @@@
        rack (>= 1.0.0)
        rack-test (>= 0.5.4)
        xpath (~> 2.0)
 -    childprocess (0.5.3)
 +    childprocess (0.5.1)
        ffi (~> 1.0, >= 1.0.11)
      cliver (0.3.2)
-     coffee-rails (3.2.2)
+     coffee-rails (4.0.1)
        coffee-script (>= 2.2.0)
-       railties (~> 3.2.0)
+       railties (>= 4.0.0, < 5.0)
      coffee-script (2.2.0)
        coffee-script-source
        execjs
-     coffee-script-source (1.6.3)
+     coffee-script-source (1.7.0)
      commonjs (0.2.7)
 -    daemon_controller (1.2.0)
 +    daemon_controller (1.1.7)
      deep_merge (1.0.1)
      erubis (2.7.0)
      execjs (2.0.2)
      ffi (1.9.3)
      headless (1.0.1)
 -    highline (1.6.21)
 +    highline (1.6.20)
      hike (1.2.3)
      httpclient (2.3.4.1)
-     i18n (0.6.5)
-     journey (1.0.4)
+     i18n (0.6.9)
 -    jquery-rails (3.1.0)
 +    jquery-rails (3.0.4)
        railties (>= 3.0, < 5.0)
        thor (>= 0.14, < 2.0)
      json (1.8.1)
@@@ -83,10 -87,11 +87,11 @@@
      mail (2.5.4)
        mime-types (~> 1.16)
        treetop (~> 1.4.8)
-     mime-types (1.25)
+     mime-types (1.25.1)
 -    mini_portile (0.5.3)
 +    mini_portile (0.5.2)
-     multi_json (1.8.2)
+     minitest (4.7.5)
 -    multi_json (1.9.3)
 -    net-scp (1.2.1)
++    multi_json (1.10.0)
 +    net-scp (1.1.2)
        net-ssh (>= 2.6.5)
      net-sftp (2.1.2)
        net-ssh (>= 2.6.5)
@@@ -109,70 -114,60 +114,66 @@@
        cliver (~> 0.3.1)
        multi_json (~> 1.0)
        websocket-driver (>= 0.2.0)
-     polyglot (0.3.3)
-     rack (1.4.5)
-     rack-cache (1.2)
-       rack (>= 0.4)
-     rack-ssl (1.3.3)
-       rack
+     polyglot (0.3.4)
+     rack (1.5.2)
      rack-test (0.6.2)
        rack (>= 1.0)
-     rails (3.2.15)
-       actionmailer (= 3.2.15)
-       actionpack (= 3.2.15)
-       activerecord (= 3.2.15)
-       activeresource (= 3.2.15)
-       activesupport (= 3.2.15)
-       bundler (~> 1.0)
-       railties (= 3.2.15)
-     railties (3.2.15)
-       actionpack (= 3.2.15)
-       activesupport (= 3.2.15)
-       rack-ssl (~> 1.3.2)
 -    rails (4.0.4)
 -      actionmailer (= 4.0.4)
 -      actionpack (= 4.0.4)
 -      activerecord (= 4.0.4)
 -      activesupport (= 4.0.4)
++    rails (4.0.5)
++      actionmailer (= 4.0.5)
++      actionpack (= 4.0.5)
++      activerecord (= 4.0.5)
++      activesupport (= 4.0.5)
+       bundler (>= 1.3.0, < 2.0)
 -      railties (= 4.0.4)
++      railties (= 4.0.5)
+       sprockets-rails (~> 2.0.0)
 -    railties (4.0.4)
 -      actionpack (= 4.0.4)
 -      activesupport (= 4.0.4)
++    railties (4.0.5)
++      actionpack (= 4.0.5)
++      activesupport (= 4.0.5)
        rake (>= 0.8.7)
-       rdoc (~> 3.4)
-       thor (>= 0.14.6, < 2.0)
-     rake (10.1.0)
-     rdoc (3.12.2)
-       json (~> 1.4)
+       thor (>= 0.18.1, < 2.0)
+     rake (10.3.1)
      ref (1.0.5)
 -    rubyzip (1.1.3)
 +    rubyzip (1.1.0)
      rvm-capistrano (1.5.1)
        capistrano (~> 2.15.4)
 -    sass (3.2.19)
 +    sass (3.2.12)
-     sass-rails (3.2.6)
-       railties (~> 3.2.0)
-       sass (>= 3.1.10)
-       tilt (~> 1.3)
+     sass-rails (4.0.3)
+       railties (>= 4.0.0, < 5.0)
+       sass (~> 3.2.0)
+       sprockets (~> 2.8, <= 2.11.0)
+       sprockets-rails (~> 2.0)
 -    selenium-webdriver (2.41.0)
 +    selenium-webdriver (2.40.0)
        childprocess (>= 0.5.0)
        multi_json (~> 1.0)
        rubyzip (~> 1.0)
        websocket (~> 1.0.4)
 +    simplecov (0.7.1)
 +      multi_json (~> 1.0)
 +      simplecov-html (~> 0.7.1)
 +    simplecov-html (0.7.1)
 +    simplecov-rcov (0.2.3)
 +      simplecov (>= 0.4.1)
-     sprockets (2.2.2)
+     sprockets (2.11.0)
        hike (~> 1.2)
        multi_json (~> 1.0)
        rack (~> 1.0)
        tilt (~> 1.1, != 1.3.0)
+     sprockets-rails (2.0.1)
+       actionpack (>= 3.0)
+       activesupport (>= 3.0)
+       sprockets (~> 2.8)
 -    sqlite3 (1.3.9)
 -    therubyracer (0.12.1)
 +    sqlite3 (1.3.8)
-     themes_for_rails (0.5.1)
-       rails (>= 3.0.0)
 +    therubyracer (0.12.0)
        libv8 (~> 3.16.14.0)
        ref
-     thor (0.18.1)
+     thor (0.19.1)
+     thread_safe (0.3.3)
      tilt (1.4.1)
      treetop (1.4.15)
        polyglot
        polyglot (>= 0.3.1)
-     tzinfo (0.3.38)
+     tzinfo (0.3.39)
 -    uglifier (2.5.0)
 +    uglifier (2.3.1)
        execjs (>= 0.3.0)
        json (>= 1.8.0)
      websocket (1.0.7)
@@@ -201,14 -196,12 +202,14 @@@ DEPENDENCIE
    passenger
    piwik_analytics
    poltergeist
-   rails (~> 3.2.0)
+   rails (~> 4.0.0)
    rvm-capistrano
    sass
-   sass-rails (~> 3.2.0)
+   sass-rails (~> 4.0.0)
    selenium-webdriver
 +  simplecov (~> 0.7.1)
 +  simplecov-rcov
    sqlite3
-   themes_for_rails
+   themes_for_rails!
    therubyracer
    uglifier (>= 1.0.3)
diff --cc apps/workbench/app/controllers/application_controller.rb
index a3576bc,4ed6187..dfb9e89
--- a/apps/workbench/app/controllers/application_controller.rb
+++ b/apps/workbench/app/controllers/application_controller.rb
@@@ -1,18 -1,14 +1,20 @@@
  class ApplicationController < ActionController::Base
+   include ArvadosApiClientHelper
+ 
    respond_to :html, :json, :js
    protect_from_forgery
 +
 +  ERROR_ACTIONS = [:render_error, :render_not_found]
 +
    around_filter :thread_clear
 -  around_filter :thread_with_mandatory_api_token, :except => [:render_exception, :render_not_found]
 +  around_filter(:thread_with_mandatory_api_token,
 +                except: [:index, :show] + ERROR_ACTIONS)
    around_filter :thread_with_optional_api_token
 -  before_filter :find_object_by_uuid, :except => [:index, :render_exception, :render_not_found]
 -  before_filter :check_user_agreements, :except => [:render_exception, :render_not_found]
 -  before_filter :check_user_notifications, :except => [:render_exception, :render_not_found]
 +  before_filter :check_user_agreements, except: ERROR_ACTIONS
 +  before_filter :check_user_notifications, except: ERROR_ACTIONS
 +  around_filter :using_reader_tokens, only: [:index, :show]
 +  before_filter :find_object_by_uuid, except: [:index] + ERROR_ACTIONS
 +  before_filter :check_my_folders, :except => ERROR_ACTIONS
    theme :select_theme
  
    begin
@@@ -194,56 -185,7 +196,56 @@@
    end
  
    protected
 -    
 +
 +  def redirect_to_login
 +    respond_to do |f|
 +      f.html {
 +        if request.method == 'GET'
-           redirect_to $arvados_api_client.arvados_login_url(return_to: request.url)
++          redirect_to arvados_api_client.arvados_login_url(return_to: request.url)
 +        else
 +          flash[:error] = "Either you are not logged in, or your session has timed out. I can't automatically log you in and re-attempt this request."
 +          redirect_to :back
 +        end
 +      }
 +      f.json {
 +        @errors = ['You do not seem to be logged in. You did not supply an API token with this request, and your session (if any) has timed out.']
 +        self.render_error status: 422
 +      }
 +    end
 +    false  # For convenience to return from callbacks
 +  end
 +
 +  def using_reader_tokens(login_optional=false)
 +    if params[:reader_tokens].is_a?(Array) and params[:reader_tokens].any?
 +      Thread.current[:reader_tokens] = params[:reader_tokens]
 +    end
 +    begin
 +      yield
 +    rescue ArvadosApiClient::NotLoggedInException
 +      if login_optional
 +        raise
 +      else
 +        return redirect_to_login
 +      end
 +    ensure
 +      Thread.current[:reader_tokens] = nil
 +    end
 +  end
 +
 +  def using_specific_api_token(api_token)
 +    start_values = {}
 +    [:arvados_api_token, :user].each do |key|
 +      start_values[key] = Thread.current[key]
 +    end
 +    Thread.current[:arvados_api_token] = api_token
 +    Thread.current[:user] = nil
 +    begin
 +      yield
 +    ensure
 +      start_values.each_key { |key| Thread.current[key] = start_values[key] }
 +    end
 +  end
 +
    def find_object_by_uuid
      if params[:id] and params[:id].match /\D/
        params[:uuid] = params.delete :id
diff --cc apps/workbench/app/models/arvados_base.rb
index 1a0da64,47a9d6d..aea6b77
--- a/apps/workbench/app/models/arvados_base.rb
+++ b/apps/workbench/app/models/arvados_base.rb
@@@ -21,27 -29,28 +29,34 @@@ class ArvadosBase < ActiveRecord::Bas
        end
    end
  
-   def initialize(*args)
-     super(*args)
+   def initialize raw_params={}
+     begin
+       super self.class.permit_attribute_params(raw_params)
+     rescue Exception => e
+       logger.debug raw_params
+       logger.debug self.class.permit_attribute_params(raw_params).inspect
+       logger.debug self.class.attribute_info.inspect
+       raise e
+     end
      @attribute_sortkey ||= {
        'id' => nil,
 -      'uuid' => '000',
 -      'owner_uuid' => '001',
 -      'created_at' => '002',
 -      'modified_at' => '003',
 -      'modified_by_user_uuid' => '004',
 -      'modified_by_client_uuid' => '005',
 -      'name' => '050',
 -      'tail_uuid' => '100',
 -      'head_uuid' => '101',
 -      'info' => 'zzz-000',
 -      'updated_at' => 'zzz-999'
 +      'name' => '000',
 +      'owner_uuid' => '002',
 +      'event_type' => '100',
 +      'link_class' => '100',
 +      'group_class' => '100',
 +      'tail_uuid' => '101',
 +      'head_uuid' => '102',
 +      'object_uuid' => '102',
 +      'summary' => '104',
 +      'description' => '104',
 +      'properties' => '150',
 +      'info' => '150',
 +      'created_at' => '200',
 +      'modified_at' => '201',
 +      'modified_by_user_uuid' => '202',
 +      'modified_by_client_uuid' => '203',
 +      'uuid' => '999',
      }
    end
  
diff --cc apps/workbench/app/models/arvados_resource_list.rb
index 3f74407,1e2e720..dedd18c
--- a/apps/workbench/app/models/arvados_resource_list.rb
+++ b/apps/workbench/app/models/arvados_resource_list.rb
@@@ -1,7 -1,8 +1,8 @@@
  class ArvadosResourceList
+   include ArvadosApiClientHelper
    include Enumerable
  
 -  def initialize(resource_class)
 +  def initialize resource_class=nil
      @resource_class = resource_class
    end
  
diff --cc apps/workbench/app/models/group.rb
index dde6019,da8fe60..8d8d390
--- a/apps/workbench/app/models/group.rb
+++ b/apps/workbench/app/models/group.rb
@@@ -1,20 -1,6 +1,20 @@@
  class Group < ArvadosBase
 -  def self.owned_items
 -    res = arvados_api_client.api self, "/#{self.uuid}/owned_items", {}
 -    arvados_api_client.unpack_api_response(res)
 +  def contents params={}
-     res = $arvados_api_client.api self.class, "/#{self.uuid}/contents", {
++    res = arvados_api_client.api self.class, "/#{self.uuid}/contents", {
 +      _method: 'GET'
 +    }.merge(params)
 +    ret = ArvadosResourceList.new
-     ret.results = $arvados_api_client.unpack_api_response(res)
++    ret.results = arvados_api_client.unpack_api_response(res)
 +    ret
 +  end
 +
 +  def class_for_display
 +    group_class == 'folder' ? 'Folder' : super
 +  end
 +
 +  def editable?
 +    respond_to?(:writable_by) and
 +      writable_by and
 +      writable_by.index(current_user.uuid)
    end
  end
diff --cc apps/workbench/app/models/user.rb
index 44d615b,59ab1ba..c1656bd
--- a/apps/workbench/app/models/user.rb
+++ b/apps/workbench/app/models/user.rb
@@@ -11,12 -11,17 +11,12 @@@ class User < ArvadosBas
    end
  
    def self.system
-     $arvados_system_user ||= begin
-                                res = $arvados_api_client.api self, '/system'
-                                $arvados_api_client.unpack_api_response(res)
-                              end
+     @@arvados_system_user ||= begin
+                                 res = arvados_api_client.api self, '/system'
+                                 arvados_api_client.unpack_api_response(res)
+                               end
    end
  
 -  def owned_items
 -    res = arvados_api_client.api self.class, "/#{self.uuid}/owned_items"
 -    arvados_api_client.unpack_api_response(res)
 -  end
 -
    def full_name
      (self.first_name || "") + " " + (self.last_name || "")
    end
diff --cc apps/workbench/app/views/layouts/application.html.erb
index 2b5ec88,2652565..f5aca0c
--- a/apps/workbench/app/views/layouts/application.html.erb
+++ b/apps/workbench/app/views/layouts/application.html.erb
@@@ -59,189 -68,167 +59,189 @@@
          <a class="navbar-brand" href="/"><%= Rails.configuration.site_name rescue Rails.application.class.parent_name %></a>
        </div>
  
 -      <div class="collapse navbar-collapse" id="workbench-navbar">
 -      <ul class="nav navbar-nav navbar-left breadcrumbs">
 -        <% if current_user %>
 -        <% if content_for?(:breadcrumbs) %>
 -          <%= yield(:breadcrumbs) %>
 -        <% else %>
 -          <li class="nav-separator"><span class="glyphicon glyphicon-arrow-right"></span></li>
 -          <li>
 -            <%= link_to(
 -                        controller.model_class.to_s.pluralize.underscore.gsub('_', ' '),
 -                        url_for({controller: params[:controller]})) %>
 -          </li>
 -          <% if params[:action] != 'index' %>
 -            <li class="nav-separator">
 -              <span class="glyphicon glyphicon-arrow-right"></span>
 +      <div class="collapse navbar-collapse">
 +        <% if current_user.andand.is_active %>
 +          <ul class="nav navbar-nav side-nav">
 +
 +            <li class="<%= 'arvados-nav-active' if params[:action] == 'home' %>">
 +              <a href="/"><i class="fa fa-lg fa-dashboard fa-fw"></i> Dashboard</a>
              </li>
 -            <li>
 -              <%= link_to_if_arvados_object @object %>
 +
 +            <li class="dropdown">
 +              <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-lg fa-hand-o-up fa-fw"></i> Help <b class="caret"></b></a>
 +              <ul class="dropdown-menu">
 +                <li><%= link_to raw('<i class="fa fa-book fa-fw"></i> Tutorials and User guide'), "#{Rails.configuration.arvados_docsite}/user", target: "_blank" %></li>
 +                <li><%= link_to raw('<i class="fa fa-book fa-fw"></i> API Reference'), "#{Rails.configuration.arvados_docsite}/api", target: "_blank" %></li>
 +                <li><%= link_to raw('<i class="fa fa-book fa-fw"></i> SDK Reference'), "#{Rails.configuration.arvados_docsite}/sdk", target: "_blank" %></li>
 +              </ul>
              </li>
 -            <li style="padding: 14px 0 14px">
 -              <%= form_tag do |f| %>
 -                <%= render :partial => "selection_checkbox", :locals => {:object => @object} %>
 -              <% end %>
 +
 +            <li class="dropdown">
 +              <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-lg fa-folder-o fa-fw"></i> Folders <b class="caret"></b></a>
 +              <ul class="dropdown-menu">
 +                <li><%= link_to raw('<i class="fa fa-plus fa-fw"></i> Create new folder'), folders_path, method: :post %></li>
 +                <% @my_top_level_folders.call[0..7].each do |folder| %>
 +                <li><%= link_to raw('<i class="fa fa-folder-open fa-fw"></i> ') + folder.name, folder_path(folder) %></li>
 +                <% end %>
 +                <li><a href="/folders">
 +                    <i class="fa fa-ellipsis-h fa-fw"></i> Show all folders
 +                </a></li>
 +              </ul>
              </li>
 -          <% end %>
 -        <% end %>
 -        <% end %>
 -      </ul>
 -
 -      <ul class="nav navbar-nav navbar-right">
 -
 -        <li>
 -          <a><i class="rotating loading glyphicon glyphicon-refresh"></i></a>
 -        </li>
 -
 -        <% if current_user %>
 -        <!-- XXX placeholder for this when search is implemented
 -        <li>
 -          <form class="navbar-form" role="search">
 -            <div class="input-group" style="width: 220px">
 -              <input type="text" class="form-control" placeholder="search">
 -              <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
 -            </div>
 -          </form>
 -        </li>
 -        -->
 -
 -        <li class="dropdown notification-menu">
 -          <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="collections-menu">
 -            <span class="glyphicon glyphicon-paperclip"></span>
 -            <span class="badge" id="persistent-selection-count"></span>
 -            <span class="caret"></span>
 -          </a>
 -            <ul class="dropdown-menu" role="menu" id="persistent-selection-list">
 -              <%= form_tag '/actions' do %>
 -              <div id="selection-form-content"></div>
 -              <% end %>
 -          </ul>
 -        </li>
 -
 -        <% if current_user.is_active %>
 -        <li class="dropdown notification-menu">
 -          <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="notifications-menu">
 -            <span class="glyphicon glyphicon-envelope"></span>
 -            <span class="badge badge-alert notification-count"><%= @notification_count %></span>
 -            <span class="caret"></span>
 -          </a>
 -          <ul class="dropdown-menu" role="menu">
 -            <% if (@notifications || []).length > 0 %>
 -              <% @notifications.each_with_index do |n, i| %>
 -                <% if i > 0 %><li class="divider"></li><% end %>
 -                <li class="notification"><%= n.call(self) %></li>
 -              <% end %>
 -            <% else %>
 -              <li class="notification empty">No notifications.</li>
 +            <li><a href="/collections">
 +                <i class="fa fa-lg fa-briefcase fa-fw"></i> Collections (data files)
 +            </a></li>
 +            <li><a href="/pipeline_instances">
 +                <i class="fa fa-lg fa-tasks fa-fw"></i> Pipeline instances
 +            </a></li>
 +            <li><a href="/pipeline_templates">
 +                <i class="fa fa-lg fa-gears fa-fw"></i> Pipeline templates
 +            </a></li>
 +            <li> </li>
 +            <li><a href="/repositories">
 +                <i class="fa fa-lg fa-code-fork fa-fw"></i> Repositories
 +            </a></li>
 +            <li><a href="/virtual_machines">
 +                <i class="fa fa-lg fa-terminal fa-fw"></i> Virtual machines
 +            </a></li>
 +            <li><a href="/humans">
 +                <i class="fa fa-lg fa-male fa-fw"></i> Humans
 +            </a></li>
 +            <li><a href="/specimens">
 +                <i class="fa fa-lg fa-flask fa-fw"></i> Specimens
 +            </a></li>
 +            <li><a href="/traits">
 +                <i class="fa fa-lg fa-clipboard fa-fw"></i> Traits
 +            </a></li>
 +            <li><a href="/links">
 +                <i class="fa fa-lg fa-arrows-h fa-fw"></i> Links
 +            </a></li>
 +            <% if current_user.andand.is_admin %>
 +              <li><a href="/users">
 +                  <i class="fa fa-lg fa-user fa-fw"></i> Users
 +              </a></li>
              <% end %>
 +            <li><a href="/groups">
 +                <i class="fa fa-lg fa-users fa-fw"></i> Groups
 +            </a></li>
 +            <li><a href="/nodes">
 +                <i class="fa fa-lg fa-cogs fa-fw"></i> Compute nodes
 +            </a></li>
 +            <li><a href="/keep_disks">
 +                <i class="fa fa-lg fa-hdd-o fa-fw"></i> Keep disks
 +            </a></li>
            </ul>
 -        </li>
          <% end %>
  
 -        <li class="dropdown">
 -          <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="user-menu">
 -            <span class="glyphicon glyphicon-user"></span><span class="caret"></span>
 -          </a>
 -          <ul class="dropdown-menu" role="menu">
 -            <li role="presentation" class="dropdown-header"><%= current_user.email %></li>
 -            <% if current_user.is_active %>
 -            <li role="presentation" class="divider"></li>
 -            <li role="presentation"><a href="/authorized_keys" role="menuitem">Manage ssh keys</a></li>
 -            <li role="presentation"><a href="/api_client_authorizations" role="menuitem">Manage API tokens</a></li>
 -            <li role="presentation" class="divider"></li>
 +        <ul class="nav navbar-nav navbar-left breadcrumbs">
 +          <% if current_user %>
 +            <% if content_for?(:breadcrumbs) %>
 +              <%= yield(:breadcrumbs) %>
 +            <% else %>
 +              <li class="nav-separator"><span class="glyphicon glyphicon-arrow-right"></span></li>
 +              <li>
 +                <%= link_to(
 +                            controller.controller_name.humanize.downcase,
 +                            url_for({controller: params[:controller]})) %>
 +              </li>
 +              <% if params[:action] != 'index' %>
 +                <li class="nav-separator">
 +                  <span class="glyphicon glyphicon-arrow-right"></span>
 +                </li>
 +                <li>
 +                  <%= link_to_if_arvados_object @object, {friendly_name: true}, {data: {object_uuid: @object.andand.uuid, name: 'name'}} %>
 +                </li>
 +                <li style="padding: 14px 0 14px">
 +                  <%= form_tag do |f| %>
 +                    <%= render :partial => "selection_checkbox", :locals => {:object => @object} %>
 +                  <% end %>
 +                </li>
 +              <% end %>
              <% end %>
 -            <li role="presentation"><a href="<%= logout_path %>" role="menuitem">Log out</a></li>
 -          </ul>
 -        </li>
 -	<% else -%>
 -          <li><a href="<%= arvados_api_client.arvados_login_url(return_to: root_url) %>">Log in</a></li>
 -	<% end -%>
 -      </ul>
 -      </div><!-- /.navbar-collapse -->
 -    </div><!-- /.container-fluid -->
 -  </div>
 +          <% end %>
 +        </ul>
  
 -  <div class="container-fluid">
 -      <div class="col-sm-9 col-sm-offset-3">
 -        <div id="content" class="body-content">
 -          <%= yield %>
 -        </div>
 -      </div>
 -      <div class="col-sm-3 left-nav">
 -        <div class="arvados-nav-container">
 -        <% if current_user.andand.is_active %>
 -        <div class="well">
 -        <ul class="arvados-nav">
 -          <li class="<%= 'arvados-nav-active' if params[:action] == 'home' %>">
 -            <a href="/">Dashboard</a>
 +        <ul class="nav navbar-nav navbar-right">
 +
 +          <li>
 +            <a><i class="rotating loading glyphicon glyphicon-refresh"></i></a>
            </li>
  
 -          <% [['Data', [['collections', 'Collections (data files)'],
 -                        ['humans'],
 -                        ['traits'],
 -                        ['specimens'],
 -                        ['links']]],
 -              ['Activity', [['pipeline_instances', 'Recent pipeline instances'],
 -                            ['jobs', 'Recent jobs']]],
 -              ['Compute', [['pipeline_templates'],
 -                           ['repositories', 'Code repositories'],
 -                           ['virtual_machines']]],
 -              ['System', [['users'],
 -                         ['groups'],
 -                         ['nodes', 'Compute nodes'],
 -                         ['keep_disks']]]].each do |j| %>
 -            <li><%= j[0] %>
 -              <ul>
 -              <% j[1].each do |k| %>
 -                <% unless k[0] == 'users' and !current_user.andand.is_admin %>
 -                  <li class="<%= 'arvados-nav-active' if (params[:controller] == k[0] && params[:action] != 'home') %>">
 -                    <a href="/<%= k[0] %>">
 -                      <%= if k[1] then k[1] else k[0].capitalize.gsub('_', ' ') end %>
 -                    </a>
 -                  </li>
 +          <% if current_user %>
 +          <!-- XXX placeholder for this when search is implemented
 +          <li>
 +            <form class="navbar-form" role="search">
 +              <div class="input-group" style="width: 220px">
 +                <input type="text" class="form-control" placeholder="search">
 +                <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
 +              </div>
 +            </form>
 +          </li>
 +          -->
 +
 +          <li class="dropdown notification-menu">
 +            <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="collections-menu">
 +              <span class="glyphicon glyphicon-paperclip"></span>
 +              <span class="badge" id="persistent-selection-count"></span>
 +              <span class="caret"></span>
 +            </a>
 +              <ul class="dropdown-menu" role="menu" id="persistent-selection-list">
 +                <%= form_tag '/actions' do %>
 +                <%= hidden_field_tag 'uuid', @object.andand.uuid %>
 +                <div id="selection-form-content"></div>
                  <% end %>
 +            </ul>
 +          </li>
 +
 +          <% if current_user.is_active %>
 +          <li class="dropdown notification-menu">
 +            <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="notifications-menu">
 +              <span class="glyphicon glyphicon-envelope"></span>
 +              <span class="badge badge-alert notification-count"><%= @notification_count %></span>
 +              <span class="caret"></span>
 +            </a>
 +            <ul class="dropdown-menu" role="menu">
 +              <% if (@notifications || []).length > 0 %>
 +                <% @notifications.each_with_index do |n, i| %>
 +                  <% if i > 0 %><li class="divider"></li><% end %>
 +                  <li class="notification"><%= n.call(self) %></li>
 +                <% end %>
 +              <% else %>
 +                <li class="notification empty">No notifications.</li>
                <% end %>
 -              </ul>
 -            </li>
 +            </ul>
 +          </li>
            <% end %>
  
 -          <li>Help
 -            <ul>
 -              <li><%= link_to 'Tutorials and User guide', "#{Rails.configuration.arvados_docsite}/user", target: "_blank" %></li>
 -              <li><%= link_to 'API Reference', "#{Rails.configuration.arvados_docsite}/api", target: "_blank" %></li>
 -              <li><%= link_to 'SDK Reference', "#{Rails.configuration.arvados_docsite}/sdk", target: "_blank" %></li>
 +          <li class="dropdown">
 +            <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="user-menu">
 +              <span class="glyphicon glyphicon-user"></span><span class="caret"></span>
 +            </a>
 +            <ul class="dropdown-menu" role="menu">
 +              <li role="presentation" class="dropdown-header"><%= current_user.email %></li>
 +              <% if current_user.is_active %>
 +              <li role="presentation" class="divider"></li>
 +              <li role="presentation"><a href="/authorized_keys" role="menuitem"><i class="fa fa-key fa-fw"></i> Manage ssh keys</a></li>
 +              <li role="presentation"><a href="/api_client_authorizations" role="menuitem"><i class="fa fa-ticket fa-fw"></i> Manage API tokens</a></li>
 +              <li role="presentation" class="divider"></li>
 +              <% end %>
 +              <li role="presentation"><a href="<%= logout_path %>" role="menuitem"><i class="fa fa-sign-out fa-fw"></i> Log out</a></li>
              </ul>
            </li>
 +          <% else %>
-             <li><a href="<%= $arvados_api_client.arvados_login_url(return_to: root_url) %>">Log in</a></li>
++            <li><a href="<%= arvados_api_client.arvados_login_url(return_to: root_url) %>">Log in</a></li>
 +          <% end %>
          </ul>
 -        </div>
 -        <% end %>
 -      </div>
 -        </div>
 +      </div><!-- /.navbar-collapse -->
 +    </nav>
 +
 +    <div id="page-wrapper">
 +      <%= yield %>
 +    </div>
    </div>
  
 +</div>
 +
    <%= yield :footer_html %>
    <%= piwik_tracking_tag %>
    <%= javascript_tag do %>

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list