respond_to do |f|
f.json { render json: @object.attributes.merge(href: url_for(@object)) }
f.html {
- if request.method == 'GET'
+ if request.method.in? ['GET', 'HEAD']
render
else
redirect_to params[:return_to] || @object
show
end
+ # Clone the given object, merging any attribute values supplied as
+ # with a create action.
+ def copy
+ @new_resource_attrs ||= params[model_class.to_s.underscore.singularize]
+ @new_resource_attrs ||= {}
+ @object = @object.dup
+ @object.update_attributes @new_resource_attrs
+ if not @new_resource_attrs[:name] and @object.respond_to? :name
+ if @object.name and @object.name != ''
+ @object.name = "Copy of #{@object.name}"
+ else
+ @object.name = "Copy of unnamed #{@object.class_for_display.downcase}"
+ end
+ end
+ @object.save!
+ show
+ end
+
def destroy
if @object.destroy
respond_to do |f|
def redirect_to_login
respond_to do |f|
f.html {
- if request.method == 'GET'
+ if request.method.in? ['GET', 'HEAD']
redirect_to arvados_api_client.arvados_login_url(return_to: request.url)
else
flash[:error] = "Either you are not logged in, or your session has timed out. I can't automatically log you in and re-attempt this request."
# call to verify its authenticity.
if verify_api_token
session[:arvados_api_token] = params[:api_token]
- if !request.format.json? and request.method == 'GET'
+ if !request.format.json? and request.method.in? ['GET', 'HEAD']
# Repeat this request with api_token in the (new) session
# cookie instead of the query string. This prevents API
# tokens from appearing in (and being inadvisedly copied
end
def thread_with_mandatory_api_token
- thread_with_api_token do
- yield
+ thread_with_api_token(true) do
+ if Thread.current[:arvados_api_token]
+ yield
+ elsif session[:arvados_api_token]
+ # Expired session. Clear it before refreshing login so that,
+ # if this login procedure fails, we end up showing the "please
+ # log in" page instead of getting stuck in a redirect loop.
+ session.delete :arvados_api_token
+ redirect_to_login
+ else
+ render 'users/welcome'
+ end
end
end
end
def check_user_agreements
- if current_user && !current_user.is_active && current_user.is_invited
+ if current_user && !current_user.is_active
+ if not current_user.is_invited
+ return render 'users/inactive'
+ end
signatures = UserAgreement.signatures
@signed_ua_uuids = UserAgreement.signatures.map &:head_uuid
@required_user_agreements = UserAgreement.all.map do |ua|
root_of[g.uuid] == current_user.uuid
end
end
+
+ helper_method :recent_jobs_and_pipelines
+ def recent_jobs_and_pipelines
+ in_my_folders = ['owner_uuid','in',my_folders.collect(&:uuid)]
+ (Job.limit(10).filter([in_my_folders]) |
+ PipelineInstance.limit(10).filter([in_my_folders])).
+ sort_by do |x|
+ x.finished_at || x.started_at || x.created_at rescue x.created_at
+ end
+ end
+
+ helper_method :get_object
+ def get_object uuid
+ if @get_object.nil? and @objects
+ @get_object = @objects.each_with_object({}) do |object, h|
+ h[object.uuid] = object
+ end
+ end
+ @get_object ||= {}
+ @get_object[uuid]
+ end
end