From 155848c15844554a5d5fd50f9577aa2e19767d9e Mon Sep 17 00:00:00 2001 From: Ward Vandewege Date: Thu, 3 Jan 2013 20:18:03 -0500 Subject: [PATCH] Initial commit --- .gitignore | 20 + Capfile | 3 + Gemfile | 38 + Gemfile.lock | 119 + README | 261 ++ Rakefile | 7 + app/assets/images/rails.png | Bin 0 -> 6646 bytes app/assets/javascripts/application.js | 9 + app/assets/javascripts/collections.js.coffee | 3 + app/assets/stylesheets/application.css | 7 + app/assets/stylesheets/collections.css.scss | 3 + app/assets/stylesheets/scaffolds.css.scss | 69 + app/controllers/application_controller.rb | 3 + .../orvos/v1/collections_controller.rb | 90 + app/helpers/application_helper.rb | 2 + app/helpers/collections_helper.rb | 2 + app/mailers/.gitkeep | 0 app/models/.gitkeep | 0 app/models/collection.rb | 2 + app/views/layouts/application.html.erb | 14 + app/views/orvos/v1/collections/_form.html.erb | 73 + app/views/orvos/v1/collections/edit.html.erb | 6 + app/views/orvos/v1/collections/index.html.erb | 49 + app/views/orvos/v1/collections/new.html.erb | 5 + app/views/orvos/v1/collections/show.html.erb | 75 + config.ru | 4 + config/application.rb | 53 + config/boot.rb | 6 + config/database.yml.sample | 24 + config/deploy.common.rb | 16 + config/deploy.rb | 60 + config/environment.rb | 5 + config/environments/development.rb | 30 + config/environments/production.rb | 60 + config/environments/test.rb | 39 + config/initializers/backtrace_silencers.rb | 7 + config/initializers/inflections.rb | 10 + config/initializers/mime_types.rb | 5 + config/initializers/secret_token.rb | 7 + config/initializers/session_store.rb | 8 + config/initializers/wrap_parameters.rb | 14 + config/locales/en.yml | 5 + config/routes.rb | 67 + .../20121016005009_create_collections.rb | 21 + db/schema.rb | 32 + db/seeds.rb | 7 + doc/README_FOR_APP | 2 + lib/assets/.gitkeep | 0 lib/tasks/.gitkeep | 0 log/.gitkeep | 0 public/404.html | 26 + public/422.html | 26 + public/500.html | 26 + public/discovery/v1/apis/orvos/v1/rest | 3059 +++++++++++++++++ public/discovery/v1/apis/orvos/v1/rest.new | 2862 +++++++++++++++ public/favicon.ico | 0 public/index.html | 241 ++ public/robots.txt | 5 + script/rails | 38 + test/fixtures/.gitkeep | 0 test/fixtures/collections.yml | 33 + test/functional/.gitkeep | 0 .../functional/collections_controller_test.rb | 49 + test/integration/.gitkeep | 0 test/performance/browsing_test.rb | 12 + test/test_helper.rb | 13 + test/unit/.gitkeep | 0 test/unit/collection_test.rb | 7 + test/unit/helpers/collections_helper_test.rb | 4 + vendor/assets/stylesheets/.gitkeep | 0 vendor/plugins/.gitkeep | 0 71 files changed, 7743 insertions(+) create mode 100644 .gitignore create mode 100644 Capfile create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 README create mode 100644 Rakefile create mode 100644 app/assets/images/rails.png create mode 100644 app/assets/javascripts/application.js create mode 100644 app/assets/javascripts/collections.js.coffee create mode 100644 app/assets/stylesheets/application.css create mode 100644 app/assets/stylesheets/collections.css.scss create mode 100644 app/assets/stylesheets/scaffolds.css.scss create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/orvos/v1/collections_controller.rb create mode 100644 app/helpers/application_helper.rb create mode 100644 app/helpers/collections_helper.rb create mode 100644 app/mailers/.gitkeep create mode 100644 app/models/.gitkeep create mode 100644 app/models/collection.rb create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/orvos/v1/collections/_form.html.erb create mode 100644 app/views/orvos/v1/collections/edit.html.erb create mode 100644 app/views/orvos/v1/collections/index.html.erb create mode 100644 app/views/orvos/v1/collections/new.html.erb create mode 100644 app/views/orvos/v1/collections/show.html.erb create mode 100644 config.ru create mode 100644 config/application.rb create mode 100644 config/boot.rb create mode 100644 config/database.yml.sample create mode 100644 config/deploy.common.rb create mode 100644 config/deploy.rb create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/secret_token.rb create mode 100644 config/initializers/session_store.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/en.yml create mode 100644 config/routes.rb create mode 100644 db/migrate/20121016005009_create_collections.rb create mode 100644 db/schema.rb create mode 100644 db/seeds.rb create mode 100644 doc/README_FOR_APP create mode 100644 lib/assets/.gitkeep create mode 100644 lib/tasks/.gitkeep create mode 100644 log/.gitkeep create mode 100644 public/404.html create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/discovery/v1/apis/orvos/v1/rest create mode 100644 public/discovery/v1/apis/orvos/v1/rest.new create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 public/robots.txt create mode 100755 script/rails create mode 100644 test/fixtures/.gitkeep create mode 100644 test/fixtures/collections.yml create mode 100644 test/functional/.gitkeep create mode 100644 test/functional/collections_controller_test.rb create mode 100644 test/integration/.gitkeep create mode 100644 test/performance/browsing_test.rb create mode 100644 test/test_helper.rb create mode 100644 test/unit/.gitkeep create mode 100644 test/unit/collection_test.rb create mode 100644 test/unit/helpers/collections_helper_test.rb create mode 100644 vendor/assets/stylesheets/.gitkeep create mode 100644 vendor/plugins/.gitkeep diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..2f520c9ea0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile ~/.gitignore_global + +# Ignore bundler config +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 + +# Ignore all logfiles and tempfiles. +/log/*.log +/tmp + +# Some sensitive files +/config/api.clinicalfuture.com.* +/config/database.yml + diff --git a/Capfile b/Capfile new file mode 100644 index 0000000000..8a7ea65d11 --- /dev/null +++ b/Capfile @@ -0,0 +1,3 @@ +load 'deploy' +load 'config/deploy.common' +load 'config/deploy' diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000000..663260b5d2 --- /dev/null +++ b/Gemfile @@ -0,0 +1,38 @@ +source 'http://rubygems.org' + +gem 'rails', '3.1.5' + +# Bundle edge Rails instead: +# gem 'rails', :git => 'git://github.com/rails/rails.git' + +#gem 'sqlite3' +gem 'pg' + +gem 'json' + +# Gems used only for assets and not required +# in production environments by default. +group :assets do + gem 'sass-rails', '~> 3.1.5' + gem 'coffee-rails', '~> 3.1.1' + + # See https://github.com/sstephenson/execjs#readme for more supported runtimes + gem 'therubyracer' + + gem 'uglifier', '>= 1.0.3' +end + +gem 'jquery-rails' + +# To use ActiveModel has_secure_password +# gem 'bcrypt-ruby', '~> 3.0.0' + +# Use unicorn as the web server +# gem 'unicorn' + +# Deploy with Capistrano +# gem 'capistrano' + +# To use debugger +# gem 'ruby-debug' + diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000000..8b75881264 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,119 @@ +GEM + remote: http://rubygems.org/ + specs: + actionmailer (3.1.5) + actionpack (= 3.1.5) + mail (~> 2.3.3) + actionpack (3.1.5) + activemodel (= 3.1.5) + activesupport (= 3.1.5) + builder (~> 3.0.0) + erubis (~> 2.7.0) + i18n (~> 0.6) + rack (~> 1.3.6) + rack-cache (~> 1.2) + rack-mount (~> 0.8.2) + rack-test (~> 0.6.1) + sprockets (~> 2.0.4) + activemodel (3.1.5) + activesupport (= 3.1.5) + builder (~> 3.0.0) + i18n (~> 0.6) + activerecord (3.1.5) + activemodel (= 3.1.5) + activesupport (= 3.1.5) + arel (~> 2.2.3) + tzinfo (~> 0.3.29) + activeresource (3.1.5) + activemodel (= 3.1.5) + activesupport (= 3.1.5) + activesupport (3.1.5) + multi_json (>= 1.0, < 1.3) + arel (2.2.3) + builder (3.0.3) + coffee-rails (3.1.1) + coffee-script (>= 2.2.0) + railties (~> 3.1.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.3.3) + erubis (2.7.0) + execjs (1.4.0) + multi_json (~> 1.0) + hike (1.2.1) + i18n (0.6.1) + jquery-rails (2.1.3) + railties (>= 3.1.0, < 5.0) + thor (~> 0.14) + json (1.7.5) + libv8 (3.3.10.4) + mail (2.3.3) + i18n (>= 0.4.0) + mime-types (~> 1.16) + treetop (~> 1.4.8) + mime-types (1.19) + multi_json (1.2.0) + pg (0.13.2) + polyglot (0.3.3) + rack (1.3.6) + rack-cache (1.2) + rack (>= 0.4) + rack-mount (0.8.3) + rack (>= 1.0.0) + rack-ssl (1.3.2) + rack + rack-test (0.6.2) + rack (>= 1.0) + rails (3.1.5) + actionmailer (= 3.1.5) + actionpack (= 3.1.5) + activerecord (= 3.1.5) + activeresource (= 3.1.5) + activesupport (= 3.1.5) + bundler (~> 1.0) + railties (= 3.1.5) + railties (3.1.5) + actionpack (= 3.1.5) + activesupport (= 3.1.5) + rack-ssl (~> 1.3.2) + rake (>= 0.8.7) + rdoc (~> 3.4) + thor (~> 0.14.6) + rake (0.9.2.2) + rdoc (3.12) + json (~> 1.4) + sass (3.2.1) + sass-rails (3.1.6) + actionpack (~> 3.1.0) + railties (~> 3.1.0) + sass (>= 3.1.10) + tilt (~> 1.3.2) + sprockets (2.0.4) + hike (~> 1.2) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + therubyracer (0.10.2) + libv8 (~> 3.3.10) + thor (0.14.6) + tilt (1.3.3) + treetop (1.4.11) + polyglot + polyglot (>= 0.3.1) + tzinfo (0.3.33) + uglifier (1.3.0) + execjs (>= 0.3.0) + multi_json (~> 1.0, >= 1.0.2) + +PLATFORMS + ruby + +DEPENDENCIES + coffee-rails (~> 3.1.1) + jquery-rails + json + pg + rails (= 3.1.5) + sass-rails (~> 3.1.5) + therubyracer + uglifier (>= 1.0.3) diff --git a/README b/README new file mode 100644 index 0000000000..7c36f2356e --- /dev/null +++ b/README @@ -0,0 +1,261 @@ +== Welcome to Rails + +Rails is a web-application framework that includes everything needed to create +database-backed web applications according to the Model-View-Control pattern. + +This pattern splits the view (also called the presentation) into "dumb" +templates that are primarily responsible for inserting pre-built data in between +HTML tags. The model contains the "smart" domain objects (such as Account, +Product, Person, Post) that holds all the business logic and knows how to +persist themselves to a database. The controller handles the incoming requests +(such as Save New Account, Update Product, Show Post) by manipulating the model +and directing data to the view. + +In Rails, the model is handled by what's called an object-relational mapping +layer entitled Active Record. This layer allows you to present the data from +database rows as objects and embellish these data objects with business logic +methods. You can read more about Active Record in +link:files/vendor/rails/activerecord/README.html. + +The controller and view are handled by the Action Pack, which handles both +layers by its two parts: Action View and Action Controller. These two layers +are bundled in a single package due to their heavy interdependence. This is +unlike the relationship between the Active Record and Action Pack that is much +more separate. Each of these packages can be used independently outside of +Rails. You can read more about Action Pack in +link:files/vendor/rails/actionpack/README.html. + + +== Getting Started + +1. At the command prompt, create a new Rails application: + rails new myapp (where myapp is the application name) + +2. Change directory to myapp and start the web server: + cd myapp; rails server (run with --help for options) + +3. Go to http://localhost:3000/ and you'll see: + "Welcome aboard: You're riding Ruby on Rails!" + +4. Follow the guidelines to start developing your application. You can find +the following resources handy: + +* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html +* Ruby on Rails Tutorial Book: http://www.railstutorial.org/ + + +== Debugging Rails + +Sometimes your application goes wrong. Fortunately there are a lot of tools that +will help you debug it and get it back on the rails. + +First area to check is the application log files. Have "tail -f" commands +running on the server.log and development.log. Rails will automatically display +debugging and runtime information to these files. Debugging info will also be +shown in the browser on requests from 127.0.0.1. + +You can also log your own messages directly into the log file from your code +using the Ruby logger class from inside your controllers. Example: + + class WeblogController < ActionController::Base + def destroy + @weblog = Weblog.find(params[:id]) + @weblog.destroy + logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") + end + end + +The result will be a message in your log file along the lines of: + + Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! + +More information on how to use the logger is at http://www.ruby-doc.org/core/ + +Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are +several books available online as well: + +* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) +* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) + +These two books will bring you up to speed on the Ruby language and also on +programming in general. + + +== Debugger + +Debugger support is available through the debugger command when you start your +Mongrel or WEBrick server with --debugger. This means that you can break out of +execution at any point in the code, investigate and change the model, and then, +resume execution! You need to install ruby-debug to run the server in debugging +mode. With gems, use sudo gem install ruby-debug. Example: + + class WeblogController < ActionController::Base + def index + @posts = Post.all + debugger + end + end + +So the controller will accept the action, run the first line, then present you +with a IRB prompt in the server window. Here you can do things like: + + >> @posts.inspect + => "[#nil, "body"=>nil, "id"=>"1"}>, + #"Rails", "body"=>"Only ten..", "id"=>"2"}>]" + >> @posts.first.title = "hello from a debugger" + => "hello from a debugger" + +...and even better, you can examine how your runtime objects actually work: + + >> f = @posts.first + => #nil, "body"=>nil, "id"=>"1"}> + >> f. + Display all 152 possibilities? (y or n) + +Finally, when you're ready to resume execution, you can enter "cont". + + +== Console + +The console is a Ruby shell, which allows you to interact with your +application's domain model. Here you'll have all parts of the application +configured, just like it is when the application is running. You can inspect +domain models, change values, and save to the database. Starting the script +without arguments will launch it in the development environment. + +To start the console, run rails console from the application +directory. + +Options: + +* Passing the -s, --sandbox argument will rollback any modifications + made to the database. +* Passing an environment name as an argument will load the corresponding + environment. Example: rails console production. + +To reload your controllers and models after launching the console run +reload! + +More information about irb can be found at: +link:http://www.rubycentral.org/pickaxe/irb.html + + +== dbconsole + +You can go to the command line of your database directly through rails +dbconsole. You would be connected to the database with the credentials +defined in database.yml. Starting the script without arguments will connect you +to the development database. Passing an argument will connect you to a different +database, like rails dbconsole production. Currently works for MySQL, +PostgreSQL and SQLite 3. + +== Description of Contents + +The default directory structure of a generated Ruby on Rails application: + + |-- app + | |-- assets + | |-- images + | |-- javascripts + | `-- stylesheets + | |-- controllers + | |-- helpers + | |-- mailers + | |-- models + | `-- views + | `-- layouts + |-- config + | |-- environments + | |-- initializers + | `-- locales + |-- db + |-- doc + |-- lib + | `-- tasks + |-- log + |-- public + |-- script + |-- test + | |-- fixtures + | |-- functional + | |-- integration + | |-- performance + | `-- unit + |-- tmp + | |-- cache + | |-- pids + | |-- sessions + | `-- sockets + `-- vendor + |-- assets + `-- stylesheets + `-- plugins + +app + Holds all the code that's specific to this particular application. + +app/assets + Contains subdirectories for images, stylesheets, and JavaScript files. + +app/controllers + Holds controllers that should be named like weblogs_controller.rb for + automated URL mapping. All controllers should descend from + ApplicationController which itself descends from ActionController::Base. + +app/models + Holds models that should be named like post.rb. Models descend from + ActiveRecord::Base by default. + +app/views + Holds the template files for the view that should be named like + weblogs/index.html.erb for the WeblogsController#index action. All views use + eRuby syntax by default. + +app/views/layouts + Holds the template files for layouts to be used with views. This models the + common header/footer method of wrapping views. In your views, define a layout + using the layout :default and create a file named default.html.erb. + Inside default.html.erb, call <% yield %> to render the view using this + layout. + +app/helpers + Holds view helpers that should be named like weblogs_helper.rb. These are + generated for you automatically when using generators for controllers. + Helpers can be used to wrap functionality for your views into methods. + +config + Configuration files for the Rails environment, the routing map, the database, + and other dependencies. + +db + Contains the database schema in schema.rb. db/migrate contains all the + sequence of Migrations for your schema. + +doc + This directory is where your application documentation will be stored when + generated using rake doc:app + +lib + Application specific libraries. Basically, any kind of custom code that + doesn't belong under controllers, models, or helpers. This directory is in + the load path. + +public + The directory available for the web server. Also contains the dispatchers and the + default HTML files. This should be set as the DOCUMENT_ROOT of your web + server. + +script + Helper scripts for automation and generation. + +test + Unit and functional tests along with fixtures. When using the rails generate + command, template test files will be generated for you and placed in this + directory. + +vendor + External libraries that the application depends on. Also includes the plugins + subdirectory. If the app has frozen rails, those gems also go here, under + vendor/rails/. This directory is in the load path. diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000000..17d5fe7202 --- /dev/null +++ b/Rakefile @@ -0,0 +1,7 @@ +#!/usr/bin/env rake +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Server::Application.load_tasks diff --git a/app/assets/images/rails.png b/app/assets/images/rails.png new file mode 100644 index 0000000000000000000000000000000000000000..d5edc04e65f555e3ba4dcdaad39dc352e75b575e GIT binary patch literal 6646 zcmVpVcQya!6@Dsmj@#jv7C*qh zIhOJ6_K0n?*d`*T7TDuW-}m`9Kz3~>+7`DUkbAraU%yi+R{N~~XA2B%zt-4=tLimUer9!2M~N{G5bftFij_O&)a zsHnOppFIzebQ`RA0$!yUM-lg#*o@_O2wf422iLnM6cU(ktYU8#;*G!QGhIy9+ZfzKjLuZo%@a z-i@9A`X%J{^;2q&ZHY3C(B%gqCPW!8{9C0PMcNZccefK){s|V5-xxtHQc@uf>XqhD z7#N^siWqetgq29aX>G^olMf=bbRF6@Y(}zYxw6o!9WBdG1unP}<(V;zKlcR2p86fq zYjaqB^;Ycq>Wy@5T1xOzG3tucG3e%nPvajaN{CrFbnzv^9&K3$NrDm*eQe4`BGQ2bI;dFEwyt>hK%X!L6)82aOZp zsrGcJ#7PoX7)s|~t6is?FfX*7vWdREi58tiY4S)t6u*|kv?J)d_$r+CH#eZ?Ef+I_ z(eVlX8dh~4QP?o*E`_MgaNFIKj*rtN(0Raj3ECjSXcWfd#27NYs&~?t`QZFT}!Zaf=ldZIhi}LhQlqLo+o5(Pvui&{7PD__^53f9j>HW`Q z_V8X5j~$|GP9qXu0C#!@RX2}lXD35@3N5{BkUi%jtaPQ*H6OX2zIz4QPuqmTv3`vG{zc>l3t0B9E75h< z8&twGh%dp7WPNI+tRl%#gf2}Epg8st+~O4GjtwJsXfN;EjAmyr6z5dnaFU(;IV~QK zW62fogF~zA``(Q>_SmD!izc6Y4zq*97|NAPHp1j5X7Op2%;GLYm>^HEMyObo6s7l) zE3n|aOHi5~B84!}b^b*-aL2E)>OEJX_tJ~t<#VJ?bT?lDwyDB&5SZ$_1aUhmAY}#* zs@V1I+c5md9%R-o#_DUfqVtRk>59{+Opd5Yu%dAU#VQW}^m}x-30ftBx#527{^pI4 z6l2C6C7QBG$~NLYb3rVdLD#Z{+SleOp`(Lg5J}`kxdTHe(nV5BdpLrD=l|)e$gEqA zwI6vuX-PFCtcDIH>bGY2dwq&^tf+&R?)nY-@7_j%4CMRAF}C9w%p86W<2!aSY$p+k zrkFtG=cGo38RnrG28;?PNk%7a@faaXq&MS*&?1Z`7Ojw7(#>}ZG4nMAs3VXxfdW>i zY4VX02c5;f7jDPY_7@Oa)CHH}cH<3y#}_!nng^W+h1e-RL*YFYOteC@h?BtJZ+?sE zy)P5^8Mregx{nQaw1NY-|3>{Z)|0`?zc?G2-acYiSU`tj#sSGfm7k86ZQ0SQgPevcklHxM9<~4yW zR796sisf1|!#{Z=e^)0;_8iUhL8g(;j$l=02FTPZ(dZV@s#aQ`DHkLM6=YsbE4iQ!b#*374l0Jw5;jD%J;vQayq=nD8-kHI~f9Ux|32SJUM`> zGp2UGK*4t?cRKi!2he`zI#j0f${I#f-jeT?u_C7S4WsA0)ryi-1L0(@%pa^&g5x=e z=KW9+Nn(=)1T&S8g_ug%dgk*~l2O-$r9#zEGBdQsweO%t*6F4c8JC36JtTizCyy+E4h%G(+ z5>y$%0txMuQ$e~wjFgN(xrAndHQo`Za+K*?gUVDTBV&Ap^}|{w#CIq{DRe}+l@(Ec zCCV6f_?dY_{+f{}6XGn!pL_up?}@>KijT^$w#Lb6iHW&^8RP~g6y=vZBXx~B9nI^i zGexaPjcd(%)zGw!DG_dDwh-7x6+ST#R^${iz_M$uM!da8SxgB_;Z0G%Y*HpvLjKw; zX=ir7i1O$-T|*TBoH$dlW+TLf5j5sep^DlDtkox;Kg{Q%EXWedJq@J@%VAcK)j3y1 zShM!CS#qax;D@RND%2t3W6kv+#Ky0F9<3YKDbV^XJ=^$s(Vtza8V72YY)577nnldI zHMA0PUo!F3j(ubV*CM@PiK<^|RM2(DuCbG7`W}Rg(xdYC>C~ z;1KJGLN&$cRxSZunjXcntykmpFJ7;dk>shY(DdK&3K_JDJ6R%D`e~6Qv67@Rwu+q9 z*|NG{r}4F8f{Dfzt0+cZMd$fvlX3Q`dzM46@r?ISxr;9gBTG2rmfiGOD*#c*3f)cc zF+PFZobY$-^}J8 z%n=h4;x2}cP!@SiVd!v;^Wwo0(N??-ygDr7gG^NKxDjSo{5T{?$|Qo5;8V!~D6O;F*I zuY!gd@+2j_8Rn=UWDa#*4E2auWoGYDddMW7t0=yuC(xLWky?vLimM~!$3fgu!dR>p z?L?!8z>6v$|MsLb&dU?ob)Zd!B)!a*Z2eTE7 zKCzP&e}XO>CT%=o(v+WUY`Az*`9inbTG& z_9_*oQKw;sc8{ipoBC`S4Tb7a%tUE)1fE+~ib$;|(`|4QbXc2>VzFi%1nX%ti;^s3~NIL0R}!!a{0A zyCRp0F7Y&vcP&3`&Dzv5!&#h}F2R-h&QhIfq*ts&qO13{_CP}1*sLz!hI9VoTSzTu zok5pV0+~jrGymE~{TgbS#nN5+*rF7ij)cnSLQw0Ltc70zmk|O!O(kM<3zw-sUvkx~ z2`y+{xAwKSa-0}n7{$I@Zop7CWy%_xIeN1e-7&OjQ6vZZPbZ^3_ z(~=;ZSP98S2oB#35b1~_x`2gWiPdIVddEf`AD9<@c_s)TM;3J$T_l?pr{<7PTgdiy zBc5IGx)g~n=s+Z$RzYCmv8PlJu%gkh^;%mTGMc)UwRINVD~K;`Rl!5@hhGg;y>5qj zq|u-Yf0q_~Y+Mbivkkfa0nAOzB1acnytogsj_m7FB(-FjihMek#GAU4M!iXCgdK8a zjoKm?*|iz7;dHm4$^hh(`Ufl>yb>$hjIA-;>{>C}G0Di%bGvUsJkfLAV|xq32c>RqJqTBJ3Dx zYC;*Dt|S$b6)aCJFnK(Eey$M1DpVV~_MIhwK> zygo(jWC|_IRw|456`roEyXtkNLWNAt-4N1qyN$I@DvBzt;e|?g<*HK1%~cq|^u*}C zmMrwh>{QAq?Ar~4l^DqT%SQ)w)FA(#7#u+N;>E975rYML>)LgE`2<7nN=C1pC{IkV zVw}_&v6j&S?QVh*)wF3#XmE@0($^BVl1969csLKUBNer{suVd!a~B!0MxWY?=(GD6 zy$G&ERFR#i6G4=2F?R4}Mz3B?3tnpoX3)qFF2sh9-Jn*e%9F>i{WG7$_~XyOO2!+@ z6k+38KyD@-0=uee54D0!Z1@B^ilj~StchdOn(*qvg~s5QJpWGc!6U^Aj!xt-HZn_V zS%|fyQ5YS@EP2lBIodXCLjG_+a)%En+7jzngk@J>6D~^xbxKkvf-R0-c%mX+o{?&j zZZ%RxFeav8Y0gkwtdtrwUb-i0Egd2C=ADu%w5VV-hNJvl)GZ?M;y$!?b=S+wKRK7Q zcOjPT!p<*#8m;TsBih=@Xc&c)?Vy`Ys>IvK@|1%N+M6J-^RCRaZcPP2eQh9DEGZr+ z?8B~wF14mk4Xkuen{wY^CWwS1PI<8gikY*)3?RSo5l8es4*J z43k_BIwc}of=6Pfs%xIxlMDGOJN zvl!a>G)52XMqA%fbgkZi%)%bN*ZzZw2!rn4@+J)2eK#kWuEW{)W~-`y1vhA5-7p%R z&f5N!a9f8cK1Xa=O}=9{wg%}Ur^+8Y(!UCeqw>%wj@|bYHD-bZO~mk3L$9_^MmF3G zvCiK^e@q6G?tHkM8%GqsBMZaB20W$UEt_5r~jc#WlR>Bv{6W>A=!#InoY zLOd04@Rz?*7PpW8u|+}bt`?+Z(GsX{Br4A2$ZZ(26Degmr9`O=t2KgHTL*==R3xcP z&Y(J7hC@6_x8zVz!CX3l4Xtss6i7r#E6kXMNN1~>9KTRzewfp))ij%)SBBl0fZdYP zd!zzQD5u8yk-u|41|Rqz7_tCFUMThZJVj)yQf6^Cwtn|Ew6cm5J|u1Bq>MWX-AfB&NE;C z62@=-0le`E6-CurMKjoIy)BuUmhMGJb}pPx!@GLWMT+wH2R?wA=MEy)o57~feFp8P zY@YXAyt4<1FD<|iw{FGQu~GEI<4C64)V*QiVk+VzOV^9GWf4ir#oYgHJz!wq>iZV#_6@_{)&lum)4x z_Of*CLVQ7wdT#XT-(h0qH%mcIF7yzMIvvTN3bPceK>PpJi(=3Nny zbSn}p$dGKQUlX&-t~RR)#F7I<8NCD^yke(vdf#4^aAh}M-{tS9-&^tC4`KU_pToXy z+|K8sx}a)Kh{h{;*V1#hs1xB%(?j>)g~`Wv(9F)f=Qn)(daVB7hZtcp^#LrEr1T1J zZSJ*lVyVVjhy)mkex9Whn=EinKDHe@KlfQI-Fl7M?-c~HnW0;C;+MbUY8?FToy;A+ zs&Nc7VZ=Of+e!G6s#+S5WBU)kgQq_I1@!uH74GJ-+O|%0HXm9Mqlvp|j%0`T>fr9^ zK;qo>XdwZW<>%tTA+<(1^6(>=-2N;hRgBnjvEjN;VbKMbFg--WrGy|XESoH1p|M4` z86(gC^vB4qScASZ&cdpT{~QDN-jC|GJ(RYoW1VW4!SSn- zhQds9&RBKn6M&GVK_Aayt(Hekbnw=tr>f z^o@v9_*iQO1*zeOrts9Q-$pc@!StS&kz$cF`s@pM`rmJXTP&h5G)A74!0e%ZJbl}( zssI|_!%~_hZFypv*S^JE5N&Kvmx7KiG<|fGMO=WrH+@Yhuj+KwiS#l4>@%2nl zS)mDikfmokO4q2A)hRVZBq2-5q&XC>%HOLkOYxZ66(s86?=0s4z5xbiOV)}L-&6b)h6(~CIaR#JNw~46+WBiU7IhB zq!NuR4!TsYnyBg>@G=Ib*cMq^k<}AMpCeYEf&dzfiGI-wOQ7hb+nA zkN7_){y&c3xC0 AQ~&?~ literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 0000000000..37c7bfcdb5 --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,9 @@ +// This is a manifest file that'll be compiled into including all the files listed below. +// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically +// be included in the compiled file accessible from http://example.com/assets/application.js +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// the compiled file. +// +//= require jquery +//= require jquery_ujs +//= require_tree . diff --git a/app/assets/javascripts/collections.js.coffee b/app/assets/javascripts/collections.js.coffee new file mode 100644 index 0000000000..761567942f --- /dev/null +++ b/app/assets/javascripts/collections.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 0000000000..fc25b5723f --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,7 @@ +/* + * This is a manifest file that'll automatically include all the stylesheets available in this directory + * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at + * the top of the compiled file, but it's generally better to create a new file per style scope. + *= require_self + *= require_tree . +*/ \ No newline at end of file diff --git a/app/assets/stylesheets/collections.css.scss b/app/assets/stylesheets/collections.css.scss new file mode 100644 index 0000000000..c21e96d80f --- /dev/null +++ b/app/assets/stylesheets/collections.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Collections controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/scaffolds.css.scss b/app/assets/stylesheets/scaffolds.css.scss new file mode 100644 index 0000000000..6ec6a8ff52 --- /dev/null +++ b/app/assets/stylesheets/scaffolds.css.scss @@ -0,0 +1,69 @@ +body { + background-color: #fff; + color: #333; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +p, ol, ul, td { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +pre { + background-color: #eee; + padding: 10px; + font-size: 11px; +} + +a { + color: #000; + &:visited { + color: #666; + } + &:hover { + color: #fff; + background-color: #000; + } +} + +div { + &.field, &.actions { + margin-bottom: 10px; + } +} + +#notice { + color: green; +} + +.field_with_errors { + padding: 2px; + background-color: red; + display: table; +} + +#error_explanation { + width: 450px; + border: 2px solid red; + padding: 7px; + padding-bottom: 0; + margin-bottom: 20px; + background-color: #f0f0f0; + h2 { + text-align: left; + font-weight: bold; + padding: 5px 5px 5px 15px; + font-size: 12px; + margin: -7px; + margin-bottom: 0px; + background-color: #c00; + color: #fff; + } + ul li { + font-size: 12px; + list-style: square; + } +} diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 0000000000..e8065d9505 --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,3 @@ +class ApplicationController < ActionController::Base + protect_from_forgery +end diff --git a/app/controllers/orvos/v1/collections_controller.rb b/app/controllers/orvos/v1/collections_controller.rb new file mode 100644 index 0000000000..3a47d14c22 --- /dev/null +++ b/app/controllers/orvos/v1/collections_controller.rb @@ -0,0 +1,90 @@ +class Orvos::V1::CollectionsController < ApplicationController + # GET /collections + # GET /collections.json + def index + @collections = Collection.all + + @collectionlist = { + :kind => "orvos#collectionList", + :etag => "", + :self_link => "", + :next_page_token => "", + :next_link => "", + :items => @collections.map { |collection| collection } + } + respond_to do |format| + format.json { render json: @collectionlist } + end + end + + # GET /collections/1 + # GET /collections/1.json + def show + @collection = Collection.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @collection } + end + end + + # GET /collections/new + # GET /collections/new.json + def new + @collection = Collection.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @collection } + end + end + + # GET /collections/1/edit + def edit + @collection = Collection.find(params[:id]) + end + + # POST /collections + # POST /collections.json + def create + @collection = Collection.new(params[:collection]) + + respond_to do |format| + if @collection.save + format.html { redirect_to @collection, notice: 'Collection was successfully created.' } + format.json { render json: @collection, status: :created, location: @collection } + else + format.html { render action: "new" } + format.json { render json: @collection.errors, status: :unprocessable_entity } + end + end + end + + # PUT /collections/1 + # PUT /collections/1.json + def update + @collection = Collection.find(params[:id]) + + respond_to do |format| + if @collection.update_attributes(params[:collection]) + format.html { redirect_to @collection, notice: 'Collection was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @collection.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /collections/1 + # DELETE /collections/1.json + def destroy + @collection = Collection.find(params[:id]) + @collection.destroy + + respond_to do |format| + format.html { redirect_to collections_url } + format.json { head :ok } + end + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 0000000000..de6be7945c --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/app/helpers/collections_helper.rb b/app/helpers/collections_helper.rb new file mode 100644 index 0000000000..30179854a2 --- /dev/null +++ b/app/helpers/collections_helper.rb @@ -0,0 +1,2 @@ +module CollectionsHelper +end diff --git a/app/mailers/.gitkeep b/app/mailers/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/models/.gitkeep b/app/models/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/models/collection.rb b/app/models/collection.rb new file mode 100644 index 0000000000..84464e1d02 --- /dev/null +++ b/app/models/collection.rb @@ -0,0 +1,2 @@ +class Collection < ActiveRecord::Base +end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 0000000000..487b6ac7f7 --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Server + <%= stylesheet_link_tag "application" %> + <%= javascript_include_tag "application" %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/app/views/orvos/v1/collections/_form.html.erb b/app/views/orvos/v1/collections/_form.html.erb new file mode 100644 index 0000000000..b1dba367eb --- /dev/null +++ b/app/views/orvos/v1/collections/_form.html.erb @@ -0,0 +1,73 @@ +<%= form_for(@collection) do |f| %> + <% if @collection.errors.any? %> +
+

<%= pluralize(@collection.errors.count, "error") %> prohibited this collection from being saved:

+ +
    + <% @collection.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.label :locator %>
+ <%= f.text_field :locator %> +
+
+ <%= f.label :create_by_client %>
+ <%= f.text_field :create_by_client %> +
+
+ <%= f.label :created_by_user %>
+ <%= f.text_field :created_by_user %> +
+
+ <%= f.label :created_at %>
+ <%= f.datetime_select :created_at %> +
+
+ <%= f.label :modified_by_client %>
+ <%= f.text_field :modified_by_client %> +
+
+ <%= f.label :modified_by_user %>
+ <%= f.text_field :modified_by_user %> +
+
+ <%= f.label :modified_at %>
+ <%= f.datetime_select :modified_at %> +
+
+ <%= f.label :portable_data_hash %>
+ <%= f.text_field :portable_data_hash %> +
+
+ <%= f.label :name %>
+ <%= f.text_field :name %> +
+
+ <%= f.label :redundancy %>
+ <%= f.number_field :redundancy %> +
+
+ <%= f.label :arbitrary_string %>
+ <%= f.text_field :arbitrary_string %> +
+
+ <%= f.label :redundancy_confirmed_by_client %>
+ <%= f.text_field :redundancy_confirmed_by_client %> +
+
+ <%= f.label :redundancy_confirmed_at %>
+ <%= f.datetime_select :redundancy_confirmed_at %> +
+
+ <%= f.label :redundancy_confirmed_as %>
+ <%= f.number_field :redundancy_confirmed_as %> +
+
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/orvos/v1/collections/edit.html.erb b/app/views/orvos/v1/collections/edit.html.erb new file mode 100644 index 0000000000..770d293bb6 --- /dev/null +++ b/app/views/orvos/v1/collections/edit.html.erb @@ -0,0 +1,6 @@ +

Editing collection

+ +<%= render 'form' %> + +<%= link_to 'Show', @collection %> | +<%= link_to 'Back', collections_path %> diff --git a/app/views/orvos/v1/collections/index.html.erb b/app/views/orvos/v1/collections/index.html.erb new file mode 100644 index 0000000000..b5cc9d51fb --- /dev/null +++ b/app/views/orvos/v1/collections/index.html.erb @@ -0,0 +1,49 @@ +

Listing collections

+ + + + + + + + + + + + + + + + + + + + + + +<% @collections.each do |collection| %> + + + + + + + + + + + + + + + + + + + +<% end %> +
LocatorCreate by clientCreated by userCreated atModified by clientModified by userModified atPortable data hashNameRedundancyArbitrary stringRedundancy confirmed by clientRedundancy confirmed atRedundancy confirmed as
<%= collection.locator %><%= collection.create_by_client %><%= collection.created_by_user %><%= collection.created_at %><%= collection.modified_by_client %><%= collection.modified_by_user %><%= collection.modified_at %><%= collection.portable_data_hash %><%= collection.name %><%= collection.redundancy %><%= collection.arbitrary_string %><%= collection.redundancy_confirmed_by_client %><%= collection.redundancy_confirmed_at %><%= collection.redundancy_confirmed_as %><%= link_to 'Show', collection %><%= link_to 'Edit', edit_collection_path(collection) %><%= link_to 'Destroy', collection, confirm: 'Are you sure?', method: :delete %>
+ +
+ +<%= link_to 'New Collection', new_collection_path %> diff --git a/app/views/orvos/v1/collections/new.html.erb b/app/views/orvos/v1/collections/new.html.erb new file mode 100644 index 0000000000..6402629408 --- /dev/null +++ b/app/views/orvos/v1/collections/new.html.erb @@ -0,0 +1,5 @@ +

New collection

+ +<%= render 'form' %> + +<%= link_to 'Back', collections_path %> diff --git a/app/views/orvos/v1/collections/show.html.erb b/app/views/orvos/v1/collections/show.html.erb new file mode 100644 index 0000000000..53eb998123 --- /dev/null +++ b/app/views/orvos/v1/collections/show.html.erb @@ -0,0 +1,75 @@ +

<%= notice %>

+ +

+ Locator: + <%= @collection.locator %> +

+ +

+ Create by client: + <%= @collection.create_by_client %> +

+ +

+ Created by user: + <%= @collection.created_by_user %> +

+ +

+ Created at: + <%= @collection.created_at %> +

+ +

+ Modified by client: + <%= @collection.modified_by_client %> +

+ +

+ Modified by user: + <%= @collection.modified_by_user %> +

+ +

+ Modified at: + <%= @collection.modified_at %> +

+ +

+ Portable data hash: + <%= @collection.portable_data_hash %> +

+ +

+ Name: + <%= @collection.name %> +

+ +

+ Redundancy: + <%= @collection.redundancy %> +

+ +

+ Arbitrary string: + <%= @collection.arbitrary_string %> +

+ +

+ Redundancy confirmed by client: + <%= @collection.redundancy_confirmed_by_client %> +

+ +

+ Redundancy confirmed at: + <%= @collection.redundancy_confirmed_at %> +

+ +

+ Redundancy confirmed as: + <%= @collection.redundancy_confirmed_as %> +

+ + +<%= link_to 'Edit', edit_collection_path(@collection) %> | +<%= link_to 'Back', collections_path %> diff --git a/config.ru b/config.ru new file mode 100644 index 0000000000..db437d4b7e --- /dev/null +++ b/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Server::Application diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 0000000000..f900129911 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,53 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +if defined?(Bundler) + # If you precompile assets before deploying to production, use this line + Bundler.require(*Rails.groups(:assets => %w(development test))) + # If you want your assets lazily compiled in production, use this line + # Bundler.require(:default, :assets, Rails.env) +end + +module Server + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Custom directories with classes and modules you want to be autoloadable. + # config.autoload_paths += %W(#{config.root}/extras) + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named. + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Activate observers that should always be running. + # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Configure the default encoding used in templates for Ruby 1.9. + config.encoding = "utf-8" + + # Configure sensitive parameters which will be filtered from the log file. + config.filter_parameters += [:password] + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' + + config.middleware.use Rack::Static, :urls => [ '/discovery' ], :root => "public" + + config.force_ssl = true + end + +end diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 0000000000..4489e58688 --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,6 @@ +require 'rubygems' + +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) diff --git a/config/database.yml.sample b/config/database.yml.sample new file mode 100644 index 0000000000..51f1028072 --- /dev/null +++ b/config/database.yml.sample @@ -0,0 +1,24 @@ +development: + adapter: mysql + encoding: utf8 + database: orvos_development + username: orvos + password: ******** + host: localhost + +test: + adapter: mysql + encoding: utf8 + database: orvos_test + username: orvos + password: ******** + host: localhost + +production: + adapter: mysql + encoding: utf8 + database: orvos_production + username: orvos + password: ******** + host: localhost + diff --git a/config/deploy.common.rb b/config/deploy.common.rb new file mode 100644 index 0000000000..3d3376dd8c --- /dev/null +++ b/config/deploy.common.rb @@ -0,0 +1,16 @@ +before 'deploy:update_code' do + local_branch = `git branch | egrep '^\\*' | cut -d' ' -f2`.strip + remote_commit = `git ls-remote '#{fetch(:repository)}' '#{local_branch}'`.strip.split.first + local_commit = `git show -s --format=format:%H`.strip + if !local_branch.match(/^(master$|production)/) + abort 'You cannot deploy unless your branch is called "master" or "production*"' + end + if local_commit != remote_commit + puts "Current branch is #{local_branch}" + puts "Last commit is #{local_commit} here" + puts "Last commit is #{remote_commit} on #{local_branch} at #{fetch(:repository)}" + abort "You cannot deploy unless HEAD = a branch = head of remote branch with same name." + end + puts "Setting deploy branch to #{local_branch}" + set :branch, local_branch +end diff --git a/config/deploy.rb b/config/deploy.rb new file mode 100644 index 0000000000..aed7df79e3 --- /dev/null +++ b/config/deploy.rb @@ -0,0 +1,60 @@ +set :application, "orvos-server" +set :domain, "controller.van" +set :deploy_to, "/var/www/orvos.clinicalfuture.com" +role :web, "controller.van" +role :app, "controller.van" +role :db, "controller.van", :primary=>true +set :scm, :git +set :repository, "git@git.clinicalfuture.com:orvos.git" +set :rails_env, "production" +set :config_files, ['database.yml'] +set :git_enable_submodules, true + +ssh_options[:forward_agent] = true +ssh_options[:user] = 'root' + +desc "Clean up old releases" +set :keep_releases, 5 +before("deploy:cleanup") { set :use_sudo, false } + +after "deploy:create_symlink", "deploy:copy_files", :roles => :app +# after "deploy:create_symlink", "deploy:bundle_install", :roles => :app +after "deploy:update", "deploy:migrate", :roles => :db +after :deploy, 'deploy:cleanup', :roles => :app + +namespace :deploy do + desc "Put a few files in place, ensure correct file ownership" + task :copy_files, :roles => :app, :except => { :no_release => true } do + # Copy a few files/make a few symlinks + run "cp /home/passenger/orvos-server/database.yml #{current_path}/config/database.yml" + run "cp /home/passenger/orvos-server/secret_token.rb #{current_path}/config/initializers/secret_token.rb" + run "cp /home/passenger/orvos-server/production.rb #{current_path}/config/environments/production.rb" + # Ensure correct ownership of a few files + run "chown www-data:www-data #{current_path}/config/environment.rb" + run "chown www-data:www-data #{current_path}/config.ru" + # This is for the drb server + run "touch #{current_path}/Gemfile.lock" + run "chown www-data:www-data #{current_path}/Gemfile.lock" + # Keep track of the git commit used for this deploy + # This is used by the lib/add_debug_info.rb middleware, which injects it in the + # environment. + run "cd #{current_path}; /usr/bin/git rev-parse HEAD > #{current_path}/git-commit.version" + end + + # desc "Install new gems if necessary" + # task :bundle_install, :roles => :app, :except => { :no_release => true } do + # run "cd #{current_path} && bundle install --local" + # end + + desc "Restarting mod_rails with restart.txt" + task :restart, :roles => :app, :except => { :no_release => true } do + # Tell passenger to restart. + run "touch #{current_path}/tmp/restart.txt" + # Tell DRB to restart. + run "/usr/sbin/monit restart mypg_server.rb" + end + [:start, :stop].each do |t| + desc "#{t} task is a no-op with mod_rails" + task t, :roles => :app do ; end + end +end diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 0000000000..9c4e0a4993 --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,5 @@ +# Load the rails application +require File.expand_path('../application', __FILE__) + +# Initialize the rails application +Server::Application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 0000000000..e77f73fed3 --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,30 @@ +Server::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger + config.active_support.deprecation = :log + + # Only use best-standards-support built into browsers + config.action_dispatch.best_standards_support = :builtin + + # Do not compress assets + config.assets.compress = false + + # Expands the lines which load the assets + config.assets.debug = true +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 0000000000..90d845edfa --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,60 @@ +Server::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # Code is not reloaded between requests + config.cache_classes = true + + # Full error reports are disabled and caching is turned on + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Disable Rails's static asset server (Apache or nginx will already do this) + config.serve_static_assets = false + + # Compress JavaScripts and CSS + config.assets.compress = true + + # Don't fallback to assets pipeline if a precompiled asset is missed + config.assets.compile = false + + # Generate digests for assets URLs + config.assets.digest = true + + # Defaults to Rails.root.join("public/assets") + # config.assets.manifest = YOUR_PATH + + # Specifies the header that your server uses for sending files + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # See everything in the log (default is :info) + # config.log_level = :debug + + # Use a different logger for distributed setups + # config.logger = SyslogLogger.new + + # Use a different cache store in production + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + # config.assets.precompile += %w( search.js ) + + # Disable delivery errors, bad email addresses will be ignored + # config.action_mailer.raise_delivery_errors = false + + # Enable threaded mode + # config.threadsafe! + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found) + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners + config.active_support.deprecation = :notify +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 0000000000..a9d893a0a1 --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,39 @@ +Server::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Configure static asset server for tests with Cache-Control for performance + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Log error messages when you accidentally call methods on nil + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Use SQL instead of Active Record's schema dumper when creating the test database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + # config.active_record.schema_format = :sql + + # Print deprecation notices to the stderr + config.active_support.deprecation = :stderr +end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000000..59385cdf37 --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 0000000000..9e8b0131f8 --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,10 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format +# (all these examples are active by default): +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 0000000000..72aca7e441 --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb new file mode 100644 index 0000000000..d63ec8b75f --- /dev/null +++ b/config/initializers/secret_token.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +Server::Application.config.secret_token = 'a107d661bc696fd1263e92c76e7e88d8fa44b6a9793e8f56ccfb23f17cfc95ea8894e28ed7dd132a3a6069673961fb1bf32edd7f8a94c8e88d8a7047bfacdde2' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100644 index 0000000000..44293cca89 --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +Server::Application.config.session_store :cookie_store, :key => '_server_session' + +# Use the database for sessions instead of the cookie-based default, +# which shouldn't be used to store highly confidential information +# (create the session table with "rails generate session_migration") +# Server::Application.config.session_store :active_record_store diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000000..da4fb076f3 --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters :format => [:json] +end + +# Disable root element in JSON by default. +ActiveSupport.on_load(:active_record) do + self.include_root_in_json = false +end diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000000..179c14ca52 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,5 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + hello: "Hello world" diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000000..20d1f6fb20 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,67 @@ +Server::Application.routes.draw do + resources :collections + + # The priority is based upon order of creation: + # first created -> highest priority. + + # Sample of regular route: + # match 'products/:id' => 'catalog#view' + # Keep in mind you can assign values other than :controller and :action + + # Sample of named route: + # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase + # This route can be invoked with purchase_url(:id => product.id) + + # Sample resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Sample resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Sample resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Sample resource route with more complex sub-resources + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', :on => :collection + # end + # end + + # Sample resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end + + # You can have the root of your site routed with "root" + # just remember to delete public/index.html. + # root :to => 'welcome#index' + + # See how all your routes lay out with "rake routes" + + # This is a legacy wild controller route that's not recommended for RESTful applications. + # Note: This route will make all actions in every controller accessible via GET requests. + # match ':controller(/:action(/:id(.:format)))' + + namespace :orvos do + namespace :v1 do + resources :collections + end + end + +end diff --git a/db/migrate/20121016005009_create_collections.rb b/db/migrate/20121016005009_create_collections.rb new file mode 100644 index 0000000000..fec4690ee8 --- /dev/null +++ b/db/migrate/20121016005009_create_collections.rb @@ -0,0 +1,21 @@ +class CreateCollections < ActiveRecord::Migration + def change + create_table :collections do |t| + t.string :locator + t.string :create_by_client + t.string :created_by_user + t.datetime :created_at + t.string :modified_by_client + t.string :modified_by_user + t.datetime :modified_at + t.string :portable_data_hash + t.string :name + t.integer :redundancy + t.string :redundancy_confirmed_by_client + t.datetime :redundancy_confirmed_at + t.integer :redundancy_confirmed_as + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000000..9e91fca29f --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,32 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended to check this file into your version control system. + +ActiveRecord::Schema.define(:version => 20121016005009) do + + create_table "collections", :force => true do |t| + t.string "locator" + t.string "create_by_client" + t.string "created_by_user" + t.datetime "created_at" + t.string "modified_by_client" + t.string "modified_by_user" + t.datetime "modified_at" + t.string "portable_data_hash" + t.string "name" + t.integer "redundancy" + t.string "redundancy_confirmed_by_client" + t.datetime "redundancy_confirmed_at" + t.integer "redundancy_confirmed_as" + t.datetime "updated_at" + end + +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 0000000000..d34dfa024d --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) +# Mayor.create(:name => 'Emanuel', :city => cities.first) diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP new file mode 100644 index 0000000000..fe41f5cc24 --- /dev/null +++ b/doc/README_FOR_APP @@ -0,0 +1,2 @@ +Use this README file to introduce your application and point to useful places in the API for learning more. +Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries. diff --git a/lib/assets/.gitkeep b/lib/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tasks/.gitkeep b/lib/tasks/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/log/.gitkeep b/log/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000000..9a48320a5f --- /dev/null +++ b/public/404.html @@ -0,0 +1,26 @@ + + + + The page you were looking for doesn't exist (404) + + + + + +
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+ + diff --git a/public/422.html b/public/422.html new file mode 100644 index 0000000000..83660ab187 --- /dev/null +++ b/public/422.html @@ -0,0 +1,26 @@ + + + + The change you wanted was rejected (422) + + + + + +
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+ + diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000000..b80307fc16 --- /dev/null +++ b/public/500.html @@ -0,0 +1,26 @@ + + + + We're sorry, but something went wrong (500) + + + + + +
+

We're sorry, but something went wrong.

+

We've been notified about this issue and we'll take a look at it shortly.

+
+ + diff --git a/public/discovery/v1/apis/orvos/v1/rest b/public/discovery/v1/apis/orvos/v1/rest new file mode 100644 index 0000000000..fb60af414e --- /dev/null +++ b/public/discovery/v1/apis/orvos/v1/rest @@ -0,0 +1,3059 @@ +{ + "kind": "discovery#restDescription", + "discoveryVersion": "v1", + "id": "orvos:v2", + "name": "orvos", + "version": "v2", + "revision": "20121015", + "title": "Orvos API", + "description": "The API to interact with Orvos.", + "documentationLink": "https://redmine.clinicalfuture.com/projects/orvos/", + "protocol": "rest", + "baseUrl": "https://api.clinicalfuture.com:3000/orvos/v1/", + "basePath": "/orvos/v1/", + "rootUrl": "https://api.clinicalfuture.com:3000/", + "servicePath": "orvos/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://api.clinicalfuture.com/auth/orvos": { + "description": "View and manage the files and documents in your Google Orvos" + }, + "https://api.clinicalfuture.com/auth/orvos.apps.readonly": { + "description": "View your Google Orvos apps" + }, + "https://api.clinicalfuture.com/auth/orvos.file": { + "description": "View and manage Google Orvos files that you have opened or created with this app" + }, + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly": { + "description": "View metadata for files and documents in your Google Orvos" + }, + "https://api.clinicalfuture.com/auth/orvos.readonly": { + "description": "View the files and documents in your Google Orvos" + } + } + } + }, + "schemas": { + "About": { + "id": "About", + "type": "object", + "description": "An item with user information and settings.", + "properties": { + "additionalRoleInfo": { + "type": "array", + "description": "Information about supported additional roles per file type. The most specific type takes precedence.", + "items": { + "type": "object", + "properties": { + "roleSets": { + "type": "array", + "description": "The supported additional roles per primary role.", + "items": { + "type": "object", + "properties": { + "additionalRoles": { + "type": "array", + "description": "The supported additional roles with the primary role.", + "items": { + "type": "string" + } + }, + "primaryRole": { + "type": "string", + "description": "A primary permission role." + } + } + } + }, + "type": { + "type": "string", + "description": "The content type that this additional role info applies to." + } + } + } + }, + "domainSharingPolicy": { + "type": "string", + "description": "The domain sharing policy for the current user." + }, + "etag": { + "type": "string", + "description": "The ETag of the item." + }, + "exportFormats": { + "type": "array", + "description": "The allowable export formats.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "The content type to convert from." + }, + "targets": { + "type": "array", + "description": "The possible content types to convert to.", + "items": { + "type": "string" + } + } + } + } + }, + "features": { + "type": "array", + "description": "List of additional features enabled on this account.", + "items": { + "type": "object", + "properties": { + "featureName": { + "type": "string", + "description": "The name of the feature." + }, + "featureRate": { + "type": "number", + "description": "The request limit rate for this feature, in queries per second.", + "format": "double" + } + } + } + }, + "importFormats": { + "type": "array", + "description": "The allowable import formats.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "The imported file's content type to convert from." + }, + "targets": { + "type": "array", + "description": "The possible content types to convert to.", + "items": { + "type": "string" + } + } + } + } + }, + "isCurrentAppInstalled": { + "type": "boolean", + "description": "A boolean indicating whether the authenticated app is installed by the authenticated user." + }, + "kind": { + "type": "string", + "description": "This is always orvos#about.", + "default": "orvos#about" + }, + "largestChangeId": { + "type": "string", + "description": "The largest change id.", + "format": "int64" + }, + "maxUploadSizes": { + "type": "array", + "description": "List of max upload sizes for each file type. The most specific type takes precedence.", + "items": { + "type": "object", + "properties": { + "size": { + "type": "string", + "description": "The max upload size for this type.", + "format": "int64" + }, + "type": { + "type": "string", + "description": "The file type." + } + } + } + }, + "name": { + "type": "string", + "description": "The name of the current user." + }, + "permissionId": { + "type": "string", + "description": "The current user's ID as visible in the permissions collection." + }, + "quotaBytesTotal": { + "type": "string", + "description": "The total number of quota bytes.", + "format": "int64" + }, + "quotaBytesUsed": { + "type": "string", + "description": "The number of quota bytes used.", + "format": "int64" + }, + "quotaBytesUsedAggregate": { + "type": "string", + "description": "The number of quota bytes used by all Google apps (Orvos, Picasa, etc.).", + "format": "int64" + }, + "quotaBytesUsedInTrash": { + "type": "string", + "description": "The number of quota bytes used by trashed items.", + "format": "int64" + }, + "remainingChangeIds": { + "type": "string", + "description": "The number of remaining change ids.", + "format": "int64" + }, + "rootFolderId": { + "type": "string", + "description": "The id of the root folder." + }, + "selfLink": { + "type": "string", + "description": "A link back to this item." + }, + "user": { + "$ref": "User", + "description": "The authenticated user." + } + } + }, + "App": { + "id": "App", + "type": "object", + "description": "Information about a third-party application which the user has installed or given access to Google Orvos.", + "properties": { + "authorized": { + "type": "boolean", + "description": "Whether the app is authorized to access data on the user's Orvos." + }, + "icons": { + "type": "array", + "description": "The various icons for the app.", + "items": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "Category of the icon. Allowed values are: \n- application - icon for the application \n- document - icon for a file associated with the app \n- documentShared - icon for a shared file associated with the app" + }, + "iconUrl": { + "type": "string", + "description": "URL for the icon." + }, + "size": { + "type": "integer", + "description": "Size of the icon. Represented as the maximum of the width and height.", + "format": "int32" + } + } + } + }, + "id": { + "type": "string", + "description": "The ID of the app." + }, + "installed": { + "type": "boolean", + "description": "Whether the app is installed." + }, + "kind": { + "type": "string", + "description": "This is always orvos#app.", + "default": "orvos#app" + }, + "name": { + "type": "string", + "description": "The name of the app." + }, + "objectType": { + "type": "string", + "description": "The type of object this app creates (e.g. Chart). If empty, the app name should be used instead." + }, + "primaryFileExtensions": { + "type": "array", + "description": "The list of primary file extensions.", + "items": { + "type": "string" + } + }, + "primaryMimeTypes": { + "type": "array", + "description": "The list of primary mime types.", + "items": { + "type": "string" + } + }, + "productUrl": { + "type": "string", + "description": "The product URL." + }, + "secondaryFileExtensions": { + "type": "array", + "description": "The list of secondary file extensions.", + "items": { + "type": "string" + } + }, + "secondaryMimeTypes": { + "type": "array", + "description": "The list of secondary mime types.", + "items": { + "type": "string" + } + }, + "supportsCreate": { + "type": "boolean", + "description": "Whether this app supports creating new objects." + }, + "supportsImport": { + "type": "boolean", + "description": "Whether this app supports importing Google Docs." + }, + "useByDefault": { + "type": "boolean", + "description": "Whether the app is selected as the default handler for the types it supports." + } + } + }, + "AppList": { + "id": "AppList", + "type": "object", + "description": "A list of third-party applications which the user has installed or given access to Google Orvos.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of apps.", + "items": { + "$ref": "App" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#appList.", + "default": "orvos#appList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "Change": { + "id": "Change", + "type": "object", + "description": "Representation of a change to a file.", + "properties": { + "deleted": { + "type": "boolean", + "description": "Whether the file has been deleted." + }, + "file": { + "$ref": "File", + "description": "The updated state of the file. Present if the file has not been deleted." + }, + "fileId": { + "type": "string", + "description": "The ID of the file associated with this change." + }, + "id": { + "type": "string", + "description": "The ID of the change.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This is always orvos#change.", + "default": "orvos#change" + }, + "selfLink": { + "type": "string", + "description": "A link back to this change." + } + } + }, + "ChangeList": { + "id": "ChangeList", + "type": "object", + "description": "A list of changes for a user.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of changes.", + "items": { + "$ref": "Change" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#changeList.", + "default": "orvos#changeList" + }, + "largestChangeId": { + "type": "string", + "description": "The current largest change ID.", + "format": "int64" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of changes." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of changes." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ChildList": { + "id": "ChildList", + "type": "object", + "description": "A list of children of a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of children.", + "items": { + "$ref": "ChildReference" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#childList.", + "default": "orvos#childList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of children." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of children." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ChildReference": { + "id": "ChildReference", + "type": "object", + "description": "A reference to a file's child.", + "properties": { + "childLink": { + "type": "string", + "description": "A link to the child." + }, + "id": { + "type": "string", + "description": "The ID of the child.", + "annotations": { + "required": [ + "orvos.children.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#childReference.", + "default": "orvos#childReference" + }, + "selfLink": { + "type": "string", + "description": "A link back to this reference." + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "description": "A JSON representation of a comment on a file in Google Orvos.", + "properties": { + "anchor": { + "type": "string", + "description": "A region of the document represented as a JSON string. See anchor documentation for details on how to define and interpret anchor properties." + }, + "author": { + "$ref": "User", + "description": "The user who wrote this comment." + }, + "commentId": { + "type": "string", + "description": "The ID of the comment." + }, + "content": { + "type": "string", + "description": "The plain text content used to create this comment. This is not HTML safe and should only be used as a starting point to make edits to a comment's content.", + "annotations": { + "required": [ + "orvos.comments.insert", + "orvos.comments.update" + ] + } + }, + "context": { + "type": "object", + "description": "The context of the file which is being commented on.", + "properties": { + "type": { + "type": "string", + "description": "The MIME type of the context snippet." + }, + "value": { + "type": "string", + "description": "Data representation of the segment of the file being commented on. In the case of a text file for example, this would be the actual text that the comment is about." + } + } + }, + "createdDate": { + "type": "string", + "description": "The date when this comment was first created.", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "description": "Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed." + }, + "fileId": { + "type": "string", + "description": "The file which this comment is addressing." + }, + "fileTitle": { + "type": "string", + "description": "The title of the file which this comment is addressing." + }, + "htmlContent": { + "type": "string", + "description": "HTML formatted content for this comment." + }, + "kind": { + "type": "string", + "description": "This is always orvos#comment.", + "default": "orvos#comment" + }, + "modifiedDate": { + "type": "string", + "description": "The date when this comment or any of its replies were last modified.", + "format": "date-time" + }, + "replies": { + "type": "array", + "description": "Replies to this post.", + "items": { + "$ref": "CommentReply" + } + }, + "selfLink": { + "type": "string", + "description": "A link back to this comment." + }, + "status": { + "type": "string", + "description": "The status of this comment. Status can be changed by posting a reply to a comment with the desired status. \n- \"open\" - The comment is still open. \n- \"resolved\" - The comment has been resolved by one of its replies." + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "description": "A JSON representation of a list of comments on a file in Google Orvos.", + "properties": { + "items": { + "type": "array", + "description": "List of comments.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#commentList.", + "default": "orvos#commentList" + }, + "nextPageToken": { + "type": "string", + "description": "The token to use to request the next page of results." + } + } + }, + "CommentReply": { + "id": "CommentReply", + "type": "object", + "description": "A JSON representation of a reply to a comment on a file in Google Orvos.", + "properties": { + "author": { + "$ref": "User", + "description": "The user who wrote this reply." + }, + "content": { + "type": "string", + "description": "The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply's content. This field is required on inserts if no verb is specified (resolve/reopen).", + "annotations": { + "required": [ + "orvos.replies.update" + ] + } + }, + "createdDate": { + "type": "string", + "description": "The date when this reply was first created.", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "description": "Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed." + }, + "htmlContent": { + "type": "string", + "description": "HTML formatted content for this reply." + }, + "kind": { + "type": "string", + "description": "This is always orvos#commentReply.", + "default": "orvos#commentReply" + }, + "modifiedDate": { + "type": "string", + "description": "The date when this reply was last modified.", + "format": "date-time" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply." + }, + "verb": { + "type": "string", + "description": "The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are: \n- \"resolve\" - To resolve a comment. \n- \"reopen\" - To reopen (un-resolve) a comment." + } + } + }, + "CommentReplyList": { + "id": "CommentReplyList", + "type": "object", + "description": "A JSON representation of a list of replies to a comment on a file in Google Orvos.", + "properties": { + "items": { + "type": "array", + "description": "List of reply.", + "items": { + "$ref": "CommentReply" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#commentReplyList.", + "default": "orvos#commentReplyList" + }, + "nextPageToken": { + "type": "string", + "description": "The token to use to request the next page of results." + } + } + }, + "Collection": { + "id": "Collection", + "type": "object", + "description": "The metadata for a collection.", + "properties": { + "alternateLink": { + "type": "string", + "description": "A link for opening the collection in using a relevant Google editor or viewer." + }, + "createdDate": { + "type": "string", + "description": "Create time for this collection (formatted ISO8601 timestamp).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "A short description of the collection." + }, + "downloadUrl": { + "type": "string", + "description": "Short term download URL for the collection. This will only be populated on collections with content stored in Orvos." + }, + "editable": { + "type": "boolean", + "description": "Whether the collection can be edited by the current user." + }, + "embedLink": { + "type": "string", + "description": "A link for embedding the collection." + }, + "etag": { + "type": "string", + "description": "ETag of the collection." + }, + "explicitlyTrashed": { + "type": "boolean", + "description": "Whether this collection has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the collection is trashed." + }, + "exportLinks": { + "type": "object", + "description": "Links for exporting Google Docs to specific formats.", + "additionalProperties": { + "type": "string", + "description": "A mapping from export format to URL" + } + }, + "collectionExtension": { + "type": "string", + "description": "The collection extension used when downloading this collection. This field is set from the title when inserting or uploading new content. This will only be populated on collections with content stored in Orvos." + }, + "collectionSize": { + "type": "string", + "description": "The size of the collection in bytes. This will only be populated on collections with content stored in Orvos.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "The id of the collection." + }, + "imageMediaMetadata": { + "type": "object", + "description": "Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.", + "properties": { + "aperture": { + "type": "number", + "description": "The aperture used to create the photo (f-number).", + "format": "float" + }, + "cameraMake": { + "type": "string", + "description": "The make of the camera used to create the photo." + }, + "cameraModel": { + "type": "string", + "description": "The model of the camera used to create the photo." + }, + "date": { + "type": "string", + "description": "The date and time the photo was taken (EXIF format timestamp)." + }, + "exposureTime": { + "type": "number", + "description": "The length of the exposure, in seconds.", + "format": "float" + }, + "flashUsed": { + "type": "boolean", + "description": "Whether a flash was used to create the photo." + }, + "focalLength": { + "type": "number", + "description": "The focal length used to create the photo, in millimeters.", + "format": "float" + }, + "height": { + "type": "integer", + "description": "The height of the image in pixels.", + "format": "int32" + }, + "isoSpeed": { + "type": "integer", + "description": "The ISO speed used to create the photo.", + "format": "int32" + }, + "location": { + "type": "object", + "description": "Geographic location information stored in the image.", + "properties": { + "altitude": { + "type": "number", + "description": "The altitude stored in the image.", + "format": "double" + }, + "latitude": { + "type": "number", + "description": "The latitude stored in the image.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "The longitude stored in the image.", + "format": "double" + } + } + }, + "rotation": { + "type": "integer", + "description": "The rotation in clockwise degrees from the image's original orientation.", + "format": "int32" + }, + "width": { + "type": "integer", + "description": "The width of the image in pixels.", + "format": "int32" + } + } + }, + "indexableText": { + "type": "object", + "description": "Indexable text attributes for the collection (can only be written)", + "properties": { + "text": { + "type": "string", + "description": "The text to be indexed for this collection" + } + } + }, + "kind": { + "type": "string", + "description": "The type of collection. This is always orvos#collection.", + "default": "orvos#collection" + }, + "labels": { + "type": "object", + "description": "A group of labels for the collection.", + "properties": { + "hidden": { + "type": "boolean", + "description": "Whether this collection is hidden from the user." + }, + "restricted": { + "type": "boolean", + "description": "Whether viewers are prevented from downloading this collection." + }, + "starred": { + "type": "boolean", + "description": "Whether this collection is starred by the user." + }, + "trashed": { + "type": "boolean", + "description": "Whether this collection has been trashed." + }, + "viewed": { + "type": "boolean", + "description": "Whether this collection has been viewed by this user." + } + } + }, + "lastModifyingUserName": { + "type": "string", + "description": "Name of the last user to modify this collection. This will only be populated if a user has edited this collection." + }, + "lastViewedByMeDate": { + "type": "string", + "description": "Last time this collection was viewed by the user (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "md5Checksum": { + "type": "string", + "description": "An MD5 checksum for the content of this collection. This will only be populated on collections with content stored in Orvos." + }, + "mimeType": { + "type": "string", + "description": "The MIME type of the collection. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type." + }, + "modifiedByMeDate": { + "type": "string", + "description": "Last time this collection was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.", + "format": "date-time" + }, + "modifiedDate": { + "type": "string", + "description": "Last time this collection was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.", + "format": "date-time" + }, + "originalCollectionname": { + "type": "string", + "description": "The original collectionname if the collection was uploaded manually, or the original title if the collection was inserted through the API. Note that renames of the title will not change the original collectionname. This will only be populated on collections with content stored in Orvos." + }, + "ownerNames": { + "type": "array", + "description": "Name(s) of the owner(s) of this collection.", + "items": { + "type": "string" + } + }, + "parents": { + "type": "array", + "description": "Collection of parent folders which contain this collection.\nSetting this field will put the collection in all of the provided folders. On insert, if no folders are provided, the collection will be placed in the default root folder.", + "items": { + "$ref": "ParentReference" + } + }, + "quotaBytesUsed": { + "type": "string", + "description": "The number of quota bytes used by this collection.", + "format": "int64" + }, + "selfLink": { + "type": "string", + "description": "A link back to this collection." + }, + "sharedWithMeDate": { + "type": "string", + "description": "Time at which this collection was shared with the user (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "thumbnail": { + "type": "object", + "description": "Thumbnail for the collection. Only accepted on upload and for collections that are not already thumbnailed by Google.", + "properties": { + "image": { + "type": "string", + "description": "The URL-safe Base64 encoded bytes of the thumbnail image.", + "format": "byte" + }, + "mimeType": { + "type": "string", + "description": "The MIME type of the thumbnail." + } + } + }, + "thumbnailLink": { + "type": "string", + "description": "A link to the collection's thumbnail." + }, + "title": { + "type": "string", + "description": "The title of this collection." + }, + "userPermission": { + "$ref": "Permission", + "description": "The permissions for the authenticated user on this collection." + }, + "webContentLink": { + "type": "string", + "description": "A link for downloading the content of the collection in a browser using cookie based authentication. In cases where the content is shared publicly, the content can be downloaded without any credentials." + }, + "writersCanShare": { + "type": "boolean", + "description": "Whether writers can share the document with other users." + } + } + }, + "CollectionList": { + "id": "CollectionList", + "type": "object", + "description": "A list of collections.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of collections.", + "items": { + "$ref": "Collection" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#collectionList.", + "default": "orvos#collectionList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of collections." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of collections." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ParentList": { + "id": "ParentList", + "type": "object", + "description": "A list of a file's parents.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of parents.", + "items": { + "$ref": "ParentReference" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#parentList.", + "default": "orvos#parentList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ParentReference": { + "id": "ParentReference", + "type": "object", + "description": "A reference to a file's parent.", + "properties": { + "id": { + "type": "string", + "description": "The ID of the parent.", + "annotations": { + "required": [ + "orvos.parents.insert" + ] + } + }, + "isRoot": { + "type": "boolean", + "description": "Whether or not the parent is the root folder." + }, + "kind": { + "type": "string", + "description": "This is always orvos#parentReference.", + "default": "orvos#parentReference" + }, + "parentLink": { + "type": "string", + "description": "A link to the parent." + }, + "selfLink": { + "type": "string", + "description": "A link back to this reference." + } + } + }, + "Permission": { + "id": "Permission", + "type": "object", + "description": "A single permission for a file.", + "properties": { + "additionalRoles": { + "type": "array", + "description": "Additional roles for this user. Only commenter is currently allowed.", + "items": { + "type": "string" + } + }, + "authKey": { + "type": "string", + "description": "The authkey parameter required for this permission." + }, + "etag": { + "type": "string", + "description": "The ETag of the permission." + }, + "id": { + "type": "string", + "description": "The ID of the permission." + }, + "kind": { + "type": "string", + "description": "This is always orvos#permission.", + "default": "orvos#permission" + }, + "name": { + "type": "string", + "description": "The name for this permission." + }, + "photoLink": { + "type": "string", + "description": "A link to the profile photo, if available." + }, + "role": { + "type": "string", + "description": "The primary role for this user. Allowed values are: \n- owner \n- reader \n- writer", + "annotations": { + "required": [ + "orvos.permissions.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "A link back to this permission." + }, + "type": { + "type": "string", + "description": "The account type. Allowed values are: \n- user \n- group \n- domain \n- anyone", + "annotations": { + "required": [ + "orvos.permissions.insert" + ] + } + }, + "value": { + "type": "string", + "description": "The email address or domain name for the entity. This is not populated in responses.", + "annotations": { + "required": [ + "orvos.permissions.insert" + ] + } + }, + "withLink": { + "type": "boolean", + "description": "Whether the link is required for this permission." + } + } + }, + "PermissionList": { + "id": "PermissionList", + "type": "object", + "description": "A list of permissions associated with a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of permissions.", + "items": { + "$ref": "Permission" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#permissionList.", + "default": "orvos#permissionList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "Revision": { + "id": "Revision", + "type": "object", + "description": "A single revision of a file.", + "properties": { + "downloadUrl": { + "type": "string", + "description": "Short term download URL for the file. This will only be populated on files with content stored in Orvos." + }, + "etag": { + "type": "string", + "description": "The ETag of the revision." + }, + "exportLinks": { + "type": "object", + "description": "Links for exporting Google Docs to specific formats.", + "additionalProperties": { + "type": "string", + "description": "A mapping from export format to URL" + } + }, + "fileSize": { + "type": "string", + "description": "The size of the revision in bytes. This will only be populated on files with content stored in Orvos.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "The ID of the revision." + }, + "kind": { + "type": "string", + "description": "This is always orvos#revision.", + "default": "orvos#revision" + }, + "lastModifyingUserName": { + "type": "string", + "description": "Name of the last user to modify this revision." + }, + "md5Checksum": { + "type": "string", + "description": "An MD5 checksum for the content of this revision. This will only be populated on files with content stored in Orvos." + }, + "mimeType": { + "type": "string", + "description": "The MIME type of the revision." + }, + "modifiedDate": { + "type": "string", + "description": "Last time this revision was modified (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "originalFilename": { + "type": "string", + "description": "The original filename when this revision was created. This will only be populated on files with content stored in Orvos." + }, + "pinned": { + "type": "boolean", + "description": "Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Orvos which are not Google Docs. Revisions can also be pinned when they are created through the orvos.files.insert/update/copy by using the pinned query parameter." + }, + "publishAuto": { + "type": "boolean", + "description": "Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs." + }, + "published": { + "type": "boolean", + "description": "Whether this revision is published. This is only populated and can only be modified for Google Docs." + }, + "publishedLink": { + "type": "string", + "description": "A link to the published revision." + }, + "publishedOutsideDomain": { + "type": "boolean", + "description": "Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs." + }, + "selfLink": { + "type": "string", + "description": "A link back to this revision." + } + } + }, + "RevisionList": { + "id": "RevisionList", + "type": "object", + "description": "A list of revisions of a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of revisions.", + "items": { + "$ref": "Revision" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#revisionList.", + "default": "orvos#revisionList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "User": { + "id": "User", + "type": "object", + "description": "The JSON template for a user.", + "properties": { + "displayName": { + "type": "string", + "description": "A plain text displayable name for this user." + }, + "isAuthenticatedUser": { + "type": "boolean", + "description": "Whether this user is the same as the authenticated user of which the request was made on behalf." + }, + "kind": { + "type": "string", + "description": "This is always orvos#user.", + "default": "orvos#user" + }, + "picture": { + "type": "object", + "description": "The user's profile picture.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to a profile picture of this user." + } + } + } + } + } + }, + "resources": { + "about": { + "methods": { + "get": { + "id": "orvos.about.get", + "path": "about", + "httpMethod": "GET", + "description": "Gets the information about the current user along with Orvos API settings", + "parameters": { + "includeSubscribed": { + "type": "boolean", + "description": "Whether to include subscribed items when calculating the number of remaining change IDs", + "default": "true", + "location": "query" + }, + "maxChangeIdCount": { + "type": "string", + "description": "Maximum number of remaining change IDs to count", + "default": "1", + "format": "int64", + "location": "query" + }, + "startChangeId": { + "type": "string", + "description": "Change ID to start counting from when calculating number of remaining change IDs", + "format": "int64", + "location": "query" + } + }, + "response": { + "$ref": "About" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "apps": { + "methods": { + "get": { + "id": "orvos.apps.get", + "path": "apps/{appId}", + "httpMethod": "GET", + "description": "Gets a specific app.", + "parameters": { + "appId": { + "type": "string", + "description": "The ID of the app.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "appId" + ], + "response": { + "$ref": "App" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos.apps.readonly" + ] + }, + "list": { + "id": "orvos.apps.list", + "path": "apps", + "httpMethod": "GET", + "description": "Lists a user's apps.", + "response": { + "$ref": "AppList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos.apps.readonly" + ] + } + } + }, + "changes": { + "methods": { + "get": { + "id": "orvos.changes.get", + "path": "changes/{changeId}", + "httpMethod": "GET", + "description": "Gets a specific change.", + "parameters": { + "changeId": { + "type": "string", + "description": "The ID of the change.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "changeId" + ], + "response": { + "$ref": "Change" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "list": { + "id": "orvos.changes.list", + "path": "changes", + "httpMethod": "GET", + "description": "Lists the changes for a user.", + "parameters": { + "includeDeleted": { + "type": "boolean", + "description": "Whether to include deleted items.", + "default": "true", + "location": "query" + }, + "includeSubscribed": { + "type": "boolean", + "description": "Whether to include subscribed items.", + "default": "true", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of changes to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for changes.", + "location": "query" + }, + "startChangeId": { + "type": "string", + "description": "Change ID to start listing changes from.", + "format": "int64", + "location": "query" + } + }, + "response": { + "$ref": "ChangeList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "children": { + "methods": { + "delete": { + "id": "orvos.children.delete", + "path": "files/{folderId}/children/{childId}", + "httpMethod": "DELETE", + "description": "Removes a child from a folder.", + "parameters": { + "childId": { + "type": "string", + "description": "The ID of the child.", + "required": true, + "location": "path" + }, + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId", + "childId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.children.get", + "path": "files/{folderId}/children/{childId}", + "httpMethod": "GET", + "description": "Gets a specific child reference.", + "parameters": { + "childId": { + "type": "string", + "description": "The ID of the child.", + "required": true, + "location": "path" + }, + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId", + "childId" + ], + "response": { + "$ref": "ChildReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.children.insert", + "path": "files/{folderId}/children", + "httpMethod": "POST", + "description": "Inserts a file into a folder.", + "parameters": { + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId" + ], + "request": { + "$ref": "ChildReference" + }, + "response": { + "$ref": "ChildReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "list": { + "id": "orvos.children.list", + "path": "files/{folderId}/children", + "httpMethod": "GET", + "description": "Lists a folder's children.", + "parameters": { + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of children to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for children.", + "location": "query" + }, + "q": { + "type": "string", + "description": "Query string for searching children.", + "location": "query" + } + }, + "parameterOrder": [ + "folderId" + ], + "response": { + "$ref": "ChildList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "comments": { + "methods": { + "delete": { + "id": "orvos.comments.delete", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "DELETE", + "description": "Deletes a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "get": { + "id": "orvos.comments.get", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "GET", + "description": "Gets a comment by ID.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.comments.insert", + "path": "files/{fileId}/comments", + "httpMethod": "POST", + "description": "Creates a new comment on the given file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "list": { + "id": "orvos.comments.list", + "path": "files/{fileId}/comments", + "httpMethod": "GET", + "description": "Lists a file's comments.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "includeDeleted": { + "type": "boolean", + "description": "If set, all comments, including deleted comments (with content stripped) will be returned.", + "default": "false", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of discussions to include in the response, used for paging.", + "default": "20", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.comments.patch", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "PATCH", + "description": "Updates an existing comment. This method supports patch semantics.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "update": { + "id": "orvos.comments.update", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "PUT", + "description": "Updates an existing comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + } + } + }, + "collections": { + "methods": { + "copy": { + "id": "orvos.collections.copy", + "path": "collections/{collectionId}/copy", + "httpMethod": "POST", + "description": "Creates a copy of the specified collection.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "collectionId": { + "type": "string", + "description": "The ID of the collection to copy.", + "required": true, + "location": "path" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the head revision of the new copy.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "delete": { + "id": "orvos.collections.delete", + "path": "collections/{collectionId}", + "httpMethod": "DELETE", + "description": "Permanently deletes a collection by ID. Skips the trash.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "get": { + "id": "orvos.collections.get", + "path": "collections/{collectionId}", + "httpMethod": "GET", + "description": "Gets a collection's metadata by ID.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID for the collection in question.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully retrieving the collection.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.collections.insert", + "path": "collections", + "httpMethod": "POST", + "description": "Insert a new collection.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the head revision of the uploaded collection.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + } + }, + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "10GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/orvos/v2/collections" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/orvos/v2/collections" + } + } + } + }, + "list": { + "id": "orvos.collections.list", + "path": "collections", + "httpMethod": "GET", + "description": "Lists the user's collections.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of collections to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for collections.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Query string for searching collections.", + "location": "query" + } + }, + "response": { + "$ref": "CollectionList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.collections.patch", + "path": "collections/{collectionId}", + "httpMethod": "PATCH", + "description": "Updates collection metadata and/or content. This method supports patch semantics.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "collectionId": { + "type": "string", + "description": "The ID of the collection to update.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision will be replaced.", + "default": "true", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the new revision.", + "default": "false", + "location": "query" + }, + "setModifiedDate": { + "type": "boolean", + "description": "Whether to set the modified date with the supplied modified date.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the collection.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "touch": { + "id": "orvos.collections.touch", + "path": "collections/{collectionId}/touch", + "httpMethod": "POST", + "description": "Set the collection's updated time to the current server time.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "trash": { + "id": "orvos.collections.trash", + "path": "collections/{collectionId}/trash", + "httpMethod": "POST", + "description": "Moves a collection to the trash.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to trash.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "untrash": { + "id": "orvos.collections.untrash", + "path": "collections/{collectionId}/untrash", + "httpMethod": "POST", + "description": "Restores a collection from the trash.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to untrash.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "update": { + "id": "orvos.collections.update", + "path": "collections/{collectionId}", + "httpMethod": "PUT", + "description": "Updates collection metadata and/or content", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "collectionId": { + "type": "string", + "description": "The ID of the collection to update.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision will be replaced.", + "default": "true", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the new revision.", + "default": "false", + "location": "query" + }, + "setModifiedDate": { + "type": "boolean", + "description": "Whether to set the modified date with the supplied modified date.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the collection.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "10GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/orvos/v2/collections/{collectionId}" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/orvos/v2/collections/{collectionId}" + } + } + } + } + } + }, + "parents": { + "methods": { + "delete": { + "id": "orvos.parents.delete", + "path": "files/{fileId}/parents/{parentId}", + "httpMethod": "DELETE", + "description": "Removes a parent from a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "parentId": { + "type": "string", + "description": "The ID of the parent.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "parentId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.parents.get", + "path": "files/{fileId}/parents/{parentId}", + "httpMethod": "GET", + "description": "Gets a specific parent reference.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "parentId": { + "type": "string", + "description": "The ID of the parent.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "parentId" + ], + "response": { + "$ref": "ParentReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.parents.insert", + "path": "files/{fileId}/parents", + "httpMethod": "POST", + "description": "Adds a parent folder for a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "ParentReference" + }, + "response": { + "$ref": "ParentReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "list": { + "id": "orvos.parents.list", + "path": "files/{fileId}/parents", + "httpMethod": "GET", + "description": "Lists a file's parents.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "ParentList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "permissions": { + "methods": { + "delete": { + "id": "orvos.permissions.delete", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "DELETE", + "description": "Deletes a permission from a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.permissions.get", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "GET", + "description": "Gets a permission by ID.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.permissions.insert", + "path": "files/{fileId}/permissions", + "httpMethod": "POST", + "description": "Inserts a permission for a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "sendNotificationEmails": { + "type": "boolean", + "description": "Whether to send notification emails.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "list": { + "id": "orvos.permissions.list", + "path": "files/{fileId}/permissions", + "httpMethod": "GET", + "description": "Lists a file's permissions.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "PermissionList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.permissions.patch", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "PATCH", + "description": "Updates a permission. This method supports patch semantics.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "update": { + "id": "orvos.permissions.update", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "PUT", + "description": "Updates a permission.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + } + } + }, + "replies": { + "methods": { + "delete": { + "id": "orvos.replies.delete", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "DELETE", + "description": "Deletes a reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "get": { + "id": "orvos.replies.get", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "GET", + "description": "Gets a reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.replies.insert", + "path": "files/{fileId}/comments/{commentId}/replies", + "httpMethod": "POST", + "description": "Creates a new reply to the given comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "list": { + "id": "orvos.replies.list", + "path": "files/{fileId}/comments/{commentId}/replies", + "httpMethod": "GET", + "description": "Lists all of the replies to a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of replies to include in the response, used for paging.", + "default": "20", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "response": { + "$ref": "CommentReplyList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.replies.patch", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "PATCH", + "description": "Updates an existing reply. This method supports patch semantics.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "update": { + "id": "orvos.replies.update", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "PUT", + "description": "Updates an existing reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + } + } + }, + "revisions": { + "methods": { + "delete": { + "id": "orvos.revisions.delete", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "DELETE", + "description": "Removes a revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID of the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.revisions.get", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "GET", + "description": "Gets a specific revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID of the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "list": { + "id": "orvos.revisions.list", + "path": "files/{fileId}/revisions", + "httpMethod": "GET", + "description": "Lists a file's revisions.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "RevisionList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.revisions.patch", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "PATCH", + "description": "Updates a revision. This method supports patch semantics.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID for the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "request": { + "$ref": "Revision" + }, + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "update": { + "id": "orvos.revisions.update", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "PUT", + "description": "Updates a revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID for the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "request": { + "$ref": "Revision" + }, + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + } + } + } + } +} diff --git a/public/discovery/v1/apis/orvos/v1/rest.new b/public/discovery/v1/apis/orvos/v1/rest.new new file mode 100644 index 0000000000..f2d46fd731 --- /dev/null +++ b/public/discovery/v1/apis/orvos/v1/rest.new @@ -0,0 +1,2862 @@ +{ + "kind": "discovery#restDescription", + "discoveryVersion": "v1", + "id": "orvos:v2", + "name": "orvos", + "version": "v2", + "revision": "20121015", + "title": "Orvos API", + "description": "The API to interact with Orvos.", + "documentationLink": "https://redmine.clinicalfuture.com/projects/orvos/", + "protocol": "rest", + "baseUrl": "https://api.clinicalfuture.com:3000/orvos/v1/", + "basePath": "/orvos/v1/", + "rootUrl": "https://api.clinicalfuture.com:3000/", + "servicePath": "orvos/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://api.clinicalfuture.com/auth/orvos": { + "description": "View and manage the files and documents in your Orvos" + }, + "https://api.clinicalfuture.com/auth/orvos.apps.readonly": { + "description": "View your Orvos apps" + }, + "https://api.clinicalfuture.com/auth/orvos.file": { + "description": "View and manage Orvos files that you have opened or created with this app" + }, + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly": { + "description": "View metadata for files and documents in your Orvos" + }, + "https://api.clinicalfuture.com/auth/orvos.readonly": { + "description": "View the files and documents in your Orvos" + } + } + } + }, + "schemas": { + "About": { + "id": "About", + "type": "object", + "description": "An item with user information and settings.", + "properties": { + "additionalRoleInfo": { + "type": "array", + "description": "Information about supported additional roles per file type. The most specific type takes precedence.", + "items": { + "type": "object", + "properties": { + "roleSets": { + "type": "array", + "description": "The supported additional roles per primary role.", + "items": { + "type": "object", + "properties": { + "additionalRoles": { + "type": "array", + "description": "The supported additional roles with the primary role.", + "items": { + "type": "string" + } + }, + "primaryRole": { + "type": "string", + "description": "A primary permission role." + } + } + } + }, + "type": { + "type": "string", + "description": "The content type that this additional role info applies to." + } + } + } + }, + "domainSharingPolicy": { + "type": "string", + "description": "The domain sharing policy for the current user." + }, + "etag": { + "type": "string", + "description": "The ETag of the item." + }, + "exportFormats": { + "type": "array", + "description": "The allowable export formats.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "The content type to convert from." + }, + "targets": { + "type": "array", + "description": "The possible content types to convert to.", + "items": { + "type": "string" + } + } + } + } + }, + "features": { + "type": "array", + "description": "List of additional features enabled on this account.", + "items": { + "type": "object", + "properties": { + "featureName": { + "type": "string", + "description": "The name of the feature." + }, + "featureRate": { + "type": "number", + "description": "The request limit rate for this feature, in queries per second.", + "format": "double" + } + } + } + }, + "importFormats": { + "type": "array", + "description": "The allowable import formats.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "The imported file's content type to convert from." + }, + "targets": { + "type": "array", + "description": "The possible content types to convert to.", + "items": { + "type": "string" + } + } + } + } + }, + "isCurrentAppInstalled": { + "type": "boolean", + "description": "A boolean indicating whether the authenticated app is installed by the authenticated user." + }, + "kind": { + "type": "string", + "description": "This is always orvos#about.", + "default": "orvos#about" + }, + "largestChangeId": { + "type": "string", + "description": "The largest change id.", + "format": "int64" + }, + "maxUploadSizes": { + "type": "array", + "description": "List of max upload sizes for each file type. The most specific type takes precedence.", + "items": { + "type": "object", + "properties": { + "size": { + "type": "string", + "description": "The max upload size for this type.", + "format": "int64" + }, + "type": { + "type": "string", + "description": "The file type." + } + } + } + }, + "name": { + "type": "string", + "description": "The name of the current user." + }, + "permissionId": { + "type": "string", + "description": "The current user's ID as visible in the permissions collection." + }, + "quotaBytesTotal": { + "type": "string", + "description": "The total number of quota bytes.", + "format": "int64" + }, + "quotaBytesUsed": { + "type": "string", + "description": "The number of quota bytes used.", + "format": "int64" + }, + "quotaBytesUsedAggregate": { + "type": "string", + "description": "The number of quota bytes used by all Google apps (Orvos, Picasa, etc.).", + "format": "int64" + }, + "quotaBytesUsedInTrash": { + "type": "string", + "description": "The number of quota bytes used by trashed items.", + "format": "int64" + }, + "remainingChangeIds": { + "type": "string", + "description": "The number of remaining change ids.", + "format": "int64" + }, + "rootFolderId": { + "type": "string", + "description": "The id of the root folder." + }, + "selfLink": { + "type": "string", + "description": "A link back to this item." + }, + "user": { + "$ref": "User", + "description": "The authenticated user." + } + } + }, + "App": { + "id": "App", + "type": "object", + "description": "Information about a third-party application which the user has installed or given access to Orvos.", + "properties": { + "authorized": { + "type": "boolean", + "description": "Whether the app is authorized to access data on the user's Orvos." + }, + "icons": { + "type": "array", + "description": "The various icons for the app.", + "items": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "Category of the icon. Allowed values are: \n- application - icon for the application \n- document - icon for a file associated with the app \n- documentShared - icon for a shared file associated with the app" + }, + "iconUrl": { + "type": "string", + "description": "URL for the icon." + }, + "size": { + "type": "integer", + "description": "Size of the icon. Represented as the maximum of the width and height.", + "format": "int32" + } + } + } + }, + "id": { + "type": "string", + "description": "The ID of the app." + }, + "installed": { + "type": "boolean", + "description": "Whether the app is installed." + }, + "kind": { + "type": "string", + "description": "This is always orvos#app.", + "default": "orvos#app" + }, + "name": { + "type": "string", + "description": "The name of the app." + }, + "objectType": { + "type": "string", + "description": "The type of object this app creates (e.g. Chart). If empty, the app name should be used instead." + }, + "primaryFileExtensions": { + "type": "array", + "description": "The list of primary file extensions.", + "items": { + "type": "string" + } + }, + "primaryMimeTypes": { + "type": "array", + "description": "The list of primary mime types.", + "items": { + "type": "string" + } + }, + "productUrl": { + "type": "string", + "description": "The product URL." + }, + "secondaryFileExtensions": { + "type": "array", + "description": "The list of secondary file extensions.", + "items": { + "type": "string" + } + }, + "secondaryMimeTypes": { + "type": "array", + "description": "The list of secondary mime types.", + "items": { + "type": "string" + } + }, + "supportsCreate": { + "type": "boolean", + "description": "Whether this app supports creating new objects." + }, + "supportsImport": { + "type": "boolean", + "description": "Whether this app supports importing Google Docs." + }, + "useByDefault": { + "type": "boolean", + "description": "Whether the app is selected as the default handler for the types it supports." + } + } + }, + "AppList": { + "id": "AppList", + "type": "object", + "description": "A list of third-party applications which the user has installed or given access to Orvos.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of apps.", + "items": { + "$ref": "App" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#appList.", + "default": "orvos#appList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "Change": { + "id": "Change", + "type": "object", + "description": "Representation of a change to a file.", + "properties": { + "deleted": { + "type": "boolean", + "description": "Whether the file has been deleted." + }, + "file": { + "$ref": "File", + "description": "The updated state of the file. Present if the file has not been deleted." + }, + "fileId": { + "type": "string", + "description": "The ID of the file associated with this change." + }, + "id": { + "type": "string", + "description": "The ID of the change.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This is always orvos#change.", + "default": "orvos#change" + }, + "selfLink": { + "type": "string", + "description": "A link back to this change." + } + } + }, + "ChangeList": { + "id": "ChangeList", + "type": "object", + "description": "A list of changes for a user.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of changes.", + "items": { + "$ref": "Change" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#changeList.", + "default": "orvos#changeList" + }, + "largestChangeId": { + "type": "string", + "description": "The current largest change ID.", + "format": "int64" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of changes." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of changes." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ChildList": { + "id": "ChildList", + "type": "object", + "description": "A list of children of a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of children.", + "items": { + "$ref": "ChildReference" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#childList.", + "default": "orvos#childList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of children." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of children." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ChildReference": { + "id": "ChildReference", + "type": "object", + "description": "A reference to a file's child.", + "properties": { + "childLink": { + "type": "string", + "description": "A link to the child." + }, + "id": { + "type": "string", + "description": "The ID of the child.", + "annotations": { + "required": [ + "orvos.children.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#childReference.", + "default": "orvos#childReference" + }, + "selfLink": { + "type": "string", + "description": "A link back to this reference." + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "description": "A JSON representation of a comment on a file in Orvos.", + "properties": { + "anchor": { + "type": "string", + "description": "A region of the document represented as a JSON string. See anchor documentation for details on how to define and interpret anchor properties." + }, + "author": { + "$ref": "User", + "description": "The user who wrote this comment." + }, + "commentId": { + "type": "string", + "description": "The ID of the comment." + }, + "content": { + "type": "string", + "description": "The plain text content used to create this comment. This is not HTML safe and should only be used as a starting point to make edits to a comment's content.", + "annotations": { + "required": [ + "orvos.comments.insert", + "orvos.comments.update" + ] + } + }, + "context": { + "type": "object", + "description": "The context of the file which is being commented on.", + "properties": { + "type": { + "type": "string", + "description": "The MIME type of the context snippet." + }, + "value": { + "type": "string", + "description": "Data representation of the segment of the file being commented on. In the case of a text file for example, this would be the actual text that the comment is about." + } + } + }, + "createdDate": { + "type": "string", + "description": "The date when this comment was first created.", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "description": "Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed." + }, + "fileId": { + "type": "string", + "description": "The file which this comment is addressing." + }, + "fileTitle": { + "type": "string", + "description": "The title of the file which this comment is addressing." + }, + "htmlContent": { + "type": "string", + "description": "HTML formatted content for this comment." + }, + "kind": { + "type": "string", + "description": "This is always orvos#comment.", + "default": "orvos#comment" + }, + "modifiedDate": { + "type": "string", + "description": "The date when this comment or any of its replies were last modified.", + "format": "date-time" + }, + "replies": { + "type": "array", + "description": "Replies to this post.", + "items": { + "$ref": "CommentReply" + } + }, + "selfLink": { + "type": "string", + "description": "A link back to this comment." + }, + "status": { + "type": "string", + "description": "The status of this comment. Status can be changed by posting a reply to a comment with the desired status. \n- \"open\" - The comment is still open. \n- \"resolved\" - The comment has been resolved by one of its replies." + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "description": "A JSON representation of a list of comments on a file in Orvos.", + "properties": { + "items": { + "type": "array", + "description": "List of comments.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#commentList.", + "default": "orvos#commentList" + }, + "nextPageToken": { + "type": "string", + "description": "The token to use to request the next page of results." + } + } + }, + "CommentReply": { + "id": "CommentReply", + "type": "object", + "description": "A JSON representation of a reply to a comment on a file in Orvos.", + "properties": { + "author": { + "$ref": "User", + "description": "The user who wrote this reply." + }, + "content": { + "type": "string", + "description": "The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply's content. This field is required on inserts if no verb is specified (resolve/reopen).", + "annotations": { + "required": [ + "orvos.replies.update" + ] + } + }, + "createdDate": { + "type": "string", + "description": "The date when this reply was first created.", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "description": "Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed." + }, + "htmlContent": { + "type": "string", + "description": "HTML formatted content for this reply." + }, + "kind": { + "type": "string", + "description": "This is always orvos#commentReply.", + "default": "orvos#commentReply" + }, + "modifiedDate": { + "type": "string", + "description": "The date when this reply was last modified.", + "format": "date-time" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply." + }, + "verb": { + "type": "string", + "description": "The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are: \n- \"resolve\" - To resolve a comment. \n- \"reopen\" - To reopen (un-resolve) a comment." + } + } + }, + "CommentReplyList": { + "id": "CommentReplyList", + "type": "object", + "description": "A JSON representation of a list of replies to a comment on a file in Orvos.", + "properties": { + "items": { + "type": "array", + "description": "List of reply.", + "items": { + "$ref": "CommentReply" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#commentReplyList.", + "default": "orvos#commentReplyList" + }, + "nextPageToken": { + "type": "string", + "description": "The token to use to request the next page of results." + } + } + }, + "Collection": { + "id": "Collection", + "type": "object", + "description": "The metadata for a collection.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the collection." + }, + "created_at": { + "type": "string", + "description": "Create time for this collection (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "created_by_client": { + "type": "string", + "description": "Name of the API client that created this collection." + }, + "created_by_user": { + "type": "string", + "description": "Name of the user that created this collection." + }, + "modified_at": { + "type": "string", + "description": "Last time this collection was modified by anyone (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "modified_by_client": { + "type": "string", + "description": "Name of the last API client to modify this collection." + }, + "modified_by_user": { + "type": "string", + "description": "Name of the last user to modify this collection." + }, + "portable_data_hash": { + "type": "string", + "description": "The portable data hash for the collection." + }, + "name": { + "type": "string", + "description": "The name of the collection." + }, + "redundancy": { + "type": "integer", + "description": "The number of copies of this collection stored in this Orvos instance.", + "format": "int32" + }, + "redundancy_confirmed_by_client": { + "type": "string", + "description": "Name of the last API client to verify the redundancy for this collection." + }, + "redundancy_confirmed_at": { + "type": "string", + "description": "Last time the redundancy number was confirmed (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "redundancy_confirmed_as": { + "type": "integer", + "description": "The number of copies of this collection stored in this Orvos instance, as confirmed by the last API client to verify the redundancy for this collection.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "The id of the collection." + }, + "kind": { + "type": "string", + "description": "The type of collection. This is always orvos#collection.", + "default": "orvos#collection" + }, + "selfLink": { + "type": "string", + "description": "A link back to this collection." + }, + } + }, + "CollectionList": { + "id": "CollectionList", + "type": "object", + "description": "A list of collections.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of collections.", + "items": { + "$ref": "Collection" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#collectionList.", + "default": "orvos#collectionList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of collections." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of collections." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ParentList": { + "id": "ParentList", + "type": "object", + "description": "A list of a file's parents.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of parents.", + "items": { + "$ref": "ParentReference" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#parentList.", + "default": "orvos#parentList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ParentReference": { + "id": "ParentReference", + "type": "object", + "description": "A reference to a file's parent.", + "properties": { + "id": { + "type": "string", + "description": "The ID of the parent.", + "annotations": { + "required": [ + "orvos.parents.insert" + ] + } + }, + "isRoot": { + "type": "boolean", + "description": "Whether or not the parent is the root folder." + }, + "kind": { + "type": "string", + "description": "This is always orvos#parentReference.", + "default": "orvos#parentReference" + }, + "parentLink": { + "type": "string", + "description": "A link to the parent." + }, + "selfLink": { + "type": "string", + "description": "A link back to this reference." + } + } + }, + "Permission": { + "id": "Permission", + "type": "object", + "description": "A single permission for a file.", + "properties": { + "additionalRoles": { + "type": "array", + "description": "Additional roles for this user. Only commenter is currently allowed.", + "items": { + "type": "string" + } + }, + "authKey": { + "type": "string", + "description": "The authkey parameter required for this permission." + }, + "etag": { + "type": "string", + "description": "The ETag of the permission." + }, + "id": { + "type": "string", + "description": "The ID of the permission." + }, + "kind": { + "type": "string", + "description": "This is always orvos#permission.", + "default": "orvos#permission" + }, + "name": { + "type": "string", + "description": "The name for this permission." + }, + "photoLink": { + "type": "string", + "description": "A link to the profile photo, if available." + }, + "role": { + "type": "string", + "description": "The primary role for this user. Allowed values are: \n- owner \n- reader \n- writer", + "annotations": { + "required": [ + "orvos.permissions.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "A link back to this permission." + }, + "type": { + "type": "string", + "description": "The account type. Allowed values are: \n- user \n- group \n- domain \n- anyone", + "annotations": { + "required": [ + "orvos.permissions.insert" + ] + } + }, + "value": { + "type": "string", + "description": "The email address or domain name for the entity. This is not populated in responses.", + "annotations": { + "required": [ + "orvos.permissions.insert" + ] + } + }, + "withLink": { + "type": "boolean", + "description": "Whether the link is required for this permission." + } + } + }, + "PermissionList": { + "id": "PermissionList", + "type": "object", + "description": "A list of permissions associated with a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of permissions.", + "items": { + "$ref": "Permission" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#permissionList.", + "default": "orvos#permissionList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "Revision": { + "id": "Revision", + "type": "object", + "description": "A single revision of a file.", + "properties": { + "downloadUrl": { + "type": "string", + "description": "Short term download URL for the file. This will only be populated on files with content stored in Orvos." + }, + "etag": { + "type": "string", + "description": "The ETag of the revision." + }, + "exportLinks": { + "type": "object", + "description": "Links for exporting Google Docs to specific formats.", + "additionalProperties": { + "type": "string", + "description": "A mapping from export format to URL" + } + }, + "fileSize": { + "type": "string", + "description": "The size of the revision in bytes. This will only be populated on files with content stored in Orvos.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "The ID of the revision." + }, + "kind": { + "type": "string", + "description": "This is always orvos#revision.", + "default": "orvos#revision" + }, + "lastModifyingUserName": { + "type": "string", + "description": "Name of the last user to modify this revision." + }, + "md5Checksum": { + "type": "string", + "description": "An MD5 checksum for the content of this revision. This will only be populated on files with content stored in Orvos." + }, + "mimeType": { + "type": "string", + "description": "The MIME type of the revision." + }, + "modifiedDate": { + "type": "string", + "description": "Last time this revision was modified (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "originalFilename": { + "type": "string", + "description": "The original filename when this revision was created. This will only be populated on files with content stored in Orvos." + }, + "pinned": { + "type": "boolean", + "description": "Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Orvos which are not Google Docs. Revisions can also be pinned when they are created through the orvos.files.insert/update/copy by using the pinned query parameter." + }, + "publishAuto": { + "type": "boolean", + "description": "Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs." + }, + "published": { + "type": "boolean", + "description": "Whether this revision is published. This is only populated and can only be modified for Google Docs." + }, + "publishedLink": { + "type": "string", + "description": "A link to the published revision." + }, + "publishedOutsideDomain": { + "type": "boolean", + "description": "Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs." + }, + "selfLink": { + "type": "string", + "description": "A link back to this revision." + } + } + }, + "RevisionList": { + "id": "RevisionList", + "type": "object", + "description": "A list of revisions of a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of revisions.", + "items": { + "$ref": "Revision" + } + }, + "kind": { + "type": "string", + "description": "This is always orvos#revisionList.", + "default": "orvos#revisionList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "User": { + "id": "User", + "type": "object", + "description": "The JSON template for a user.", + "properties": { + "displayName": { + "type": "string", + "description": "A plain text displayable name for this user." + }, + "isAuthenticatedUser": { + "type": "boolean", + "description": "Whether this user is the same as the authenticated user of which the request was made on behalf." + }, + "kind": { + "type": "string", + "description": "This is always orvos#user.", + "default": "orvos#user" + }, + "picture": { + "type": "object", + "description": "The user's profile picture.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to a profile picture of this user." + } + } + } + } + } + }, + "resources": { + "about": { + "methods": { + "get": { + "id": "orvos.about.get", + "path": "about", + "httpMethod": "GET", + "description": "Gets the information about the current user along with Orvos API settings", + "parameters": { + "includeSubscribed": { + "type": "boolean", + "description": "Whether to include subscribed items when calculating the number of remaining change IDs", + "default": "true", + "location": "query" + }, + "maxChangeIdCount": { + "type": "string", + "description": "Maximum number of remaining change IDs to count", + "default": "1", + "format": "int64", + "location": "query" + }, + "startChangeId": { + "type": "string", + "description": "Change ID to start counting from when calculating number of remaining change IDs", + "format": "int64", + "location": "query" + } + }, + "response": { + "$ref": "About" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "apps": { + "methods": { + "get": { + "id": "orvos.apps.get", + "path": "apps/{appId}", + "httpMethod": "GET", + "description": "Gets a specific app.", + "parameters": { + "appId": { + "type": "string", + "description": "The ID of the app.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "appId" + ], + "response": { + "$ref": "App" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos.apps.readonly" + ] + }, + "list": { + "id": "orvos.apps.list", + "path": "apps", + "httpMethod": "GET", + "description": "Lists a user's apps.", + "response": { + "$ref": "AppList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos.apps.readonly" + ] + } + } + }, + "changes": { + "methods": { + "get": { + "id": "orvos.changes.get", + "path": "changes/{changeId}", + "httpMethod": "GET", + "description": "Gets a specific change.", + "parameters": { + "changeId": { + "type": "string", + "description": "The ID of the change.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "changeId" + ], + "response": { + "$ref": "Change" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "list": { + "id": "orvos.changes.list", + "path": "changes", + "httpMethod": "GET", + "description": "Lists the changes for a user.", + "parameters": { + "includeDeleted": { + "type": "boolean", + "description": "Whether to include deleted items.", + "default": "true", + "location": "query" + }, + "includeSubscribed": { + "type": "boolean", + "description": "Whether to include subscribed items.", + "default": "true", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of changes to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for changes.", + "location": "query" + }, + "startChangeId": { + "type": "string", + "description": "Change ID to start listing changes from.", + "format": "int64", + "location": "query" + } + }, + "response": { + "$ref": "ChangeList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "children": { + "methods": { + "delete": { + "id": "orvos.children.delete", + "path": "files/{folderId}/children/{childId}", + "httpMethod": "DELETE", + "description": "Removes a child from a folder.", + "parameters": { + "childId": { + "type": "string", + "description": "The ID of the child.", + "required": true, + "location": "path" + }, + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId", + "childId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.children.get", + "path": "files/{folderId}/children/{childId}", + "httpMethod": "GET", + "description": "Gets a specific child reference.", + "parameters": { + "childId": { + "type": "string", + "description": "The ID of the child.", + "required": true, + "location": "path" + }, + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId", + "childId" + ], + "response": { + "$ref": "ChildReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.children.insert", + "path": "files/{folderId}/children", + "httpMethod": "POST", + "description": "Inserts a file into a folder.", + "parameters": { + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId" + ], + "request": { + "$ref": "ChildReference" + }, + "response": { + "$ref": "ChildReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "list": { + "id": "orvos.children.list", + "path": "files/{folderId}/children", + "httpMethod": "GET", + "description": "Lists a folder's children.", + "parameters": { + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of children to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for children.", + "location": "query" + }, + "q": { + "type": "string", + "description": "Query string for searching children.", + "location": "query" + } + }, + "parameterOrder": [ + "folderId" + ], + "response": { + "$ref": "ChildList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "comments": { + "methods": { + "delete": { + "id": "orvos.comments.delete", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "DELETE", + "description": "Deletes a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "get": { + "id": "orvos.comments.get", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "GET", + "description": "Gets a comment by ID.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.comments.insert", + "path": "files/{fileId}/comments", + "httpMethod": "POST", + "description": "Creates a new comment on the given file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "list": { + "id": "orvos.comments.list", + "path": "files/{fileId}/comments", + "httpMethod": "GET", + "description": "Lists a file's comments.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "includeDeleted": { + "type": "boolean", + "description": "If set, all comments, including deleted comments (with content stripped) will be returned.", + "default": "false", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of discussions to include in the response, used for paging.", + "default": "20", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.comments.patch", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "PATCH", + "description": "Updates an existing comment. This method supports patch semantics.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "update": { + "id": "orvos.comments.update", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "PUT", + "description": "Updates an existing comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + } + } + }, + "collections": { + "methods": { + "copy": { + "id": "orvos.collections.copy", + "path": "collections/{collectionId}/copy", + "httpMethod": "POST", + "description": "Creates a copy of the specified collection.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "collectionId": { + "type": "string", + "description": "The ID of the collection to copy.", + "required": true, + "location": "path" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the head revision of the new copy.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "delete": { + "id": "orvos.collections.delete", + "path": "collections/{collectionId}", + "httpMethod": "DELETE", + "description": "Permanently deletes a collection by ID. Skips the trash.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "get": { + "id": "orvos.collections.get", + "path": "collections/{collectionId}", + "httpMethod": "GET", + "description": "Gets a collection's metadata by ID.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID for the collection in question.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully retrieving the collection.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.collections.insert", + "path": "collections", + "httpMethod": "POST", + "description": "Insert a new collection.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the head revision of the uploaded collection.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + } + }, + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "10GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/orvos/v2/collections" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/orvos/v2/collections" + } + } + } + }, + "list": { + "id": "orvos.collections.list", + "path": "collections", + "httpMethod": "GET", + "description": "Lists the user's collections.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of collections to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for collections.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Query string for searching collections.", + "location": "query" + } + }, + "response": { + "$ref": "CollectionList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.collections.patch", + "path": "collections/{collectionId}", + "httpMethod": "PATCH", + "description": "Updates collection metadata and/or content. This method supports patch semantics.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "collectionId": { + "type": "string", + "description": "The ID of the collection to update.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision will be replaced.", + "default": "true", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the new revision.", + "default": "false", + "location": "query" + }, + "setModifiedDate": { + "type": "boolean", + "description": "Whether to set the modified date with the supplied modified date.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the collection.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "touch": { + "id": "orvos.collections.touch", + "path": "collections/{collectionId}/touch", + "httpMethod": "POST", + "description": "Set the collection's updated time to the current server time.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "trash": { + "id": "orvos.collections.trash", + "path": "collections/{collectionId}/trash", + "httpMethod": "POST", + "description": "Moves a collection to the trash.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to trash.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "untrash": { + "id": "orvos.collections.untrash", + "path": "collections/{collectionId}/untrash", + "httpMethod": "POST", + "description": "Restores a collection from the trash.", + "parameters": { + "collectionId": { + "type": "string", + "description": "The ID of the collection to untrash.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "collectionId" + ], + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ] + }, + "update": { + "id": "orvos.collections.update", + "path": "collections/{collectionId}", + "httpMethod": "PUT", + "description": "Updates collection metadata and/or content", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this collection to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "collectionId": { + "type": "string", + "description": "The ID of the collection to update.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision will be replaced.", + "default": "true", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the new revision.", + "default": "false", + "location": "query" + }, + "setModifiedDate": { + "type": "boolean", + "description": "Whether to set the modified date with the supplied modified date.", + "default": "false", + "location": "query" + }, + "sourceLanguage": { + "type": "string", + "description": "The language of the original collection to be translated.", + "location": "query" + }, + "targetLanguage": { + "type": "string", + "description": "Target language to translate the collection to. If no sourceLanguage is provided, the API will attempt to detect the language.", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the collection.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "collectionId" + ], + "request": { + "$ref": "Collection" + }, + "response": { + "$ref": "Collection" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.collection" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "10GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/orvos/v2/collections/{collectionId}" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/orvos/v2/collections/{collectionId}" + } + } + } + } + } + }, + "parents": { + "methods": { + "delete": { + "id": "orvos.parents.delete", + "path": "files/{fileId}/parents/{parentId}", + "httpMethod": "DELETE", + "description": "Removes a parent from a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "parentId": { + "type": "string", + "description": "The ID of the parent.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "parentId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.parents.get", + "path": "files/{fileId}/parents/{parentId}", + "httpMethod": "GET", + "description": "Gets a specific parent reference.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "parentId": { + "type": "string", + "description": "The ID of the parent.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "parentId" + ], + "response": { + "$ref": "ParentReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.parents.insert", + "path": "files/{fileId}/parents", + "httpMethod": "POST", + "description": "Adds a parent folder for a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "ParentReference" + }, + "response": { + "$ref": "ParentReference" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "list": { + "id": "orvos.parents.list", + "path": "files/{fileId}/parents", + "httpMethod": "GET", + "description": "Lists a file's parents.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "ParentList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + } + } + }, + "permissions": { + "methods": { + "delete": { + "id": "orvos.permissions.delete", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "DELETE", + "description": "Deletes a permission from a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.permissions.get", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "GET", + "description": "Gets a permission by ID.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.permissions.insert", + "path": "files/{fileId}/permissions", + "httpMethod": "POST", + "description": "Inserts a permission for a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "sendNotificationEmails": { + "type": "boolean", + "description": "Whether to send notification emails.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "list": { + "id": "orvos.permissions.list", + "path": "files/{fileId}/permissions", + "httpMethod": "GET", + "description": "Lists a file's permissions.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "PermissionList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.permissions.patch", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "PATCH", + "description": "Updates a permission. This method supports patch semantics.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "update": { + "id": "orvos.permissions.update", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "PUT", + "description": "Updates a permission.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + } + } + }, + "replies": { + "methods": { + "delete": { + "id": "orvos.replies.delete", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "DELETE", + "description": "Deletes a reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "get": { + "id": "orvos.replies.get", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "GET", + "description": "Gets a reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "insert": { + "id": "orvos.replies.insert", + "path": "files/{fileId}/comments/{commentId}/replies", + "httpMethod": "POST", + "description": "Creates a new reply to the given comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "list": { + "id": "orvos.replies.list", + "path": "files/{fileId}/comments/{commentId}/replies", + "httpMethod": "GET", + "description": "Lists all of the replies to a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of replies to include in the response, used for paging.", + "default": "20", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "response": { + "$ref": "CommentReplyList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.replies.patch", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "PATCH", + "description": "Updates an existing reply. This method supports patch semantics.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + }, + "update": { + "id": "orvos.replies.update", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "PUT", + "description": "Updates an existing reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos" + ] + } + } + }, + "revisions": { + "methods": { + "delete": { + "id": "orvos.revisions.delete", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "DELETE", + "description": "Removes a revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID of the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "get": { + "id": "orvos.revisions.get", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "GET", + "description": "Gets a specific revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID of the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "list": { + "id": "orvos.revisions.list", + "path": "files/{fileId}/revisions", + "httpMethod": "GET", + "description": "Lists a file's revisions.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "RevisionList" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file", + "https://api.clinicalfuture.com/auth/orvos.metadata.readonly", + "https://api.clinicalfuture.com/auth/orvos.readonly" + ] + }, + "patch": { + "id": "orvos.revisions.patch", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "PATCH", + "description": "Updates a revision. This method supports patch semantics.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID for the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "request": { + "$ref": "Revision" + }, + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + }, + "update": { + "id": "orvos.revisions.update", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "PUT", + "description": "Updates a revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID for the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "request": { + "$ref": "Revision" + }, + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://api.clinicalfuture.com/auth/orvos", + "https://api.clinicalfuture.com/auth/orvos.file" + ] + } + } + } + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000000..9d9811a5bf --- /dev/null +++ b/public/index.html @@ -0,0 +1,241 @@ + + + + Ruby on Rails: Welcome aboard + + + + +
+ + +
+ + + + +
+

Getting started

+

Here’s how to get rolling:

+ +
    +
  1. +

    Use rails generate to create your models and controllers

    +

    To see all available options, run it without parameters.

    +
  2. + +
  3. +

    Set up a default route and remove public/index.html

    +

    Routes are set up in config/routes.rb.

    +
  4. + +
  5. +

    Create your database

    +

    Run rake db:create to create your database. If you're not using SQLite (the default), edit config/database.yml with your username and password.

    +
  6. +
+
+
+ + +
+ + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000000..085187fa58 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-Agent: * +# Disallow: / diff --git a/script/rails b/script/rails new file mode 100755 index 0000000000..7c4ec52dfc --- /dev/null +++ b/script/rails @@ -0,0 +1,38 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + + +##### SSL - ward, 2012-10-15 +require 'rubygems' +require 'rails/commands/server' +require 'rack' +require 'webrick' +require 'webrick/https' + +module Rails + class Server < ::Rack::Server + def default_options + super.merge({ + :Port => 3000, + :environment => (ENV['RAILS_ENV'] || "development").dup, + :daemonize => false, + :debugger => false, + :pid => File.expand_path("tmp/pids/server.pid"), + :config => File.expand_path("config.ru"), + :SSLEnable => true, + :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, + :SSLPrivateKey => OpenSSL::PKey::RSA.new( + File.open("config/api.clinicalfuture.com.key.pem").read), + :SSLCertificate => OpenSSL::X509::Certificate.new( + File.open("config/api.clinicalfuture.com.crt.pem").read), + :SSLCertName => [["CN", WEBrick::Utils::getservername]] + }) + end + end +end +######### /SSL + + +APP_PATH = File.expand_path('../../config/application', __FILE__) +require File.expand_path('../../config/boot', __FILE__) +require 'rails/commands' diff --git a/test/fixtures/.gitkeep b/test/fixtures/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/collections.yml b/test/fixtures/collections.yml new file mode 100644 index 0000000000..d59d7c571a --- /dev/null +++ b/test/fixtures/collections.yml @@ -0,0 +1,33 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +one: + locator: MyString + create_by_client: MyString + created_by_user: MyString + created_at: 2012-10-15 20:50:09 + modified_by_client: MyString + modified_by_user: MyString + modified_at: 2012-10-15 20:50:09 + portable_data_hash: MyString + name: MyString + redundancy: 1 + arbitrary_string: MyString + redundancy_confirmed_by_client: MyString + redundancy_confirmed_at: 2012-10-15 20:50:09 + redundancy_confirmed_as: 1 + +two: + locator: MyString + create_by_client: MyString + created_by_user: MyString + created_at: 2012-10-15 20:50:09 + modified_by_client: MyString + modified_by_user: MyString + modified_at: 2012-10-15 20:50:09 + portable_data_hash: MyString + name: MyString + redundancy: 1 + arbitrary_string: MyString + redundancy_confirmed_by_client: MyString + redundancy_confirmed_at: 2012-10-15 20:50:09 + redundancy_confirmed_as: 1 diff --git a/test/functional/.gitkeep b/test/functional/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/functional/collections_controller_test.rb b/test/functional/collections_controller_test.rb new file mode 100644 index 0000000000..b3fa9ae64f --- /dev/null +++ b/test/functional/collections_controller_test.rb @@ -0,0 +1,49 @@ +require 'test_helper' + +class CollectionsControllerTest < ActionController::TestCase + setup do + @collection = collections(:one) + end + + test "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:collections) + end + + test "should get new" do + get :new + assert_response :success + end + + test "should create collection" do + assert_difference('Collection.count') do + post :create, collection: @collection.attributes + end + + assert_redirected_to collection_path(assigns(:collection)) + end + + test "should show collection" do + get :show, id: @collection.to_param + assert_response :success + end + + test "should get edit" do + get :edit, id: @collection.to_param + assert_response :success + end + + test "should update collection" do + put :update, id: @collection.to_param, collection: @collection.attributes + assert_redirected_to collection_path(assigns(:collection)) + end + + test "should destroy collection" do + assert_difference('Collection.count', -1) do + delete :destroy, id: @collection.to_param + end + + assert_redirected_to collections_path + end +end diff --git a/test/integration/.gitkeep b/test/integration/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/performance/browsing_test.rb b/test/performance/browsing_test.rb new file mode 100644 index 0000000000..3fea27b916 --- /dev/null +++ b/test/performance/browsing_test.rb @@ -0,0 +1,12 @@ +require 'test_helper' +require 'rails/performance_test_help' + +class BrowsingTest < ActionDispatch::PerformanceTest + # Refer to the documentation for all available options + # self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory] + # :output => 'tmp/performance', :formats => [:flat] } + + def test_homepage + get '/' + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 0000000000..8bf1192ffe --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,13 @@ +ENV["RAILS_ENV"] = "test" +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. + # + # Note: You'll currently still have to declare fixtures explicitly in integration tests + # -- they do not yet inherit this setting + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/test/unit/.gitkeep b/test/unit/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/unit/collection_test.rb b/test/unit/collection_test.rb new file mode 100644 index 0000000000..4f73670750 --- /dev/null +++ b/test/unit/collection_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class CollectionTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/unit/helpers/collections_helper_test.rb b/test/unit/helpers/collections_helper_test.rb new file mode 100644 index 0000000000..16a85d9bca --- /dev/null +++ b/test/unit/helpers/collections_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class CollectionsHelperTest < ActionView::TestCase +end diff --git a/vendor/assets/stylesheets/.gitkeep b/vendor/assets/stylesheets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vendor/plugins/.gitkeep b/vendor/plugins/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 -- 2.30.2