projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
15583: Adds more with_counts to queries
[arvados.git]
/
apps
/
workbench
/
app
/
models
/
arvados_base.rb
diff --git
a/apps/workbench/app/models/arvados_base.rb
b/apps/workbench/app/models/arvados_base.rb
index 1752e0aeb121a1711e78a2741d308876564be353..b9162c2aec364bd03a34171c9981262304bc9d06 100644
(file)
--- a/
apps/workbench/app/models/arvados_base.rb
+++ b/
apps/workbench/app/models/arvados_base.rb
@@
-7,6
+7,7
@@
class ArvadosBase
include ActiveModel::Conversion
include ActiveModel::Serialization
include ActiveModel::Dirty
include ActiveModel::Conversion
include ActiveModel::Serialization
include ActiveModel::Dirty
+ include ActiveModel::AttributeAssignment
extend ActiveModel::Naming
Column = Struct.new("Column", :name)
extend ActiveModel::Naming
Column = Struct.new("Column", :name)
@@
-103,11
+104,11
@@
class ArvadosBase
attributes.symbolize_keys.each do |name, value|
send("#{name}=", value)
end
attributes.symbolize_keys.each do |name, value|
send("#{name}=", value)
end
-end
+
end
def self.columns
def self.columns
+ @discovered_columns = [] if !defined?(@discovered_columns)
return @discovered_columns if @discovered_columns.andand.any?
return @discovered_columns if @discovered_columns.andand.any?
- @discovered_columns = []
@attribute_info ||= {}
schema = arvados_api_client.discovery[:schemas][self.to_s.to_sym]
return @discovered_columns if schema.nil?
@attribute_info ||= {}
schema = arvados_api_client.discovery[:schemas][self.to_s.to_sym]
return @discovered_columns if schema.nil?
@@
-122,7
+123,6
@@
end
else
# Hash, Array
@discovered_columns << column(k, coldef[:type], coldef[:type].constantize.new)
else
# Hash, Array
@discovered_columns << column(k, coldef[:type], coldef[:type].constantize.new)
- # serialize k, coldef[:type].constantize
end
attr_reader k
@attribute_info[k] = coldef
end
attr_reader k
@attribute_info[k] = coldef
@@
-132,7
+132,14
@@
end
end
def new_record?
end
def new_record?
- (uuid == nil) ? true : false
+ # dup method doesn't reset the uuid attr
+ @uuid.nil? || @new_record || false
+ end
+
+ def initialize_dup(other)
+ super
+ @new_record = true
+ @created_at = nil
end
def self.column(name, sql_type = nil, default = nil, null = true)
end
def self.column(name, sql_type = nil, default = nil, null = true)
@@
-151,11
+158,14
@@
end
ArvadosBase::Type::Hash
when 'Array'
ArvadosBase::Type::Array
ArvadosBase::Type::Hash
when 'Array'
ArvadosBase::Type::Array
+ when 'jsonb'
+ ArvadosBase::Type::Hash
else
raise ArvadosBase::Error.new("Type unknown: #{sql_type}")
end
define_method "#{name}=" do |val|
else
raise ArvadosBase::Error.new("Type unknown: #{sql_type}")
end
define_method "#{name}=" do |val|
- casted_value = caster.new.cast(val || default)
+ val = default if val.nil?
+ casted_value = caster.new.cast(val)
attribute_will_change!(name) if send(name) != casted_value
set_attribute_after_cast(name, casted_value)
end
attribute_will_change!(name) if send(name) != casted_value
set_attribute_after_cast(name, casted_value)
end
@@
-167,7
+177,12
@@
end
end
def [](attr_name)
end
def [](attr_name)
- send(attr_name)
+ begin
+ send(attr_name)
+ rescue
+ Rails.logger.debug "BUG: access non-loaded attribute #{attr_name}"
+ nil
+ end
end
def []=(attr_name, attr_val)
end
def []=(attr_name, attr_val)
@@
-257,20
+272,36
@@
end
# The following permit! is necessary even with
# "ActionController::Parameters.permit_all_parameters = true",
# because permit_all does not permit nested attributes.
# The following permit! is necessary even with
# "ActionController::Parameters.permit_all_parameters = true",
# because permit_all does not permit nested attributes.
- if raw_params.is_a? ActionController::Parameters
- raw_params =
raw_params.to_unsafe_h
+ if
!
raw_params.is_a? ActionController::Parameters
+ raw_params =
ActionController::Parameters.new(raw_params)
end
end
-
ActionController::Parameters.new(raw_params)
.permit!
+
raw_params
.permit!
end
def self.create raw_params={}, create_params={}
end
def self.create raw_params={}, create_params={}
- x = super(permit_attribute_params(raw_params))
- x.create_params = create_params
+ x = new(permit_attribute_params(raw_params), create_params)
+ x.save
+ x
+ end
+
+ def self.create! raw_params={}, create_params={}
+ x = new(permit_attribute_params(raw_params), create_params)
+ x.save!
x
end
x
end
+ def self.table_name
+ self.name.underscore.pluralize.downcase
+ end
+
def update_attributes raw_params={}
def update_attributes raw_params={}
- super(self.class.permit_attribute_params(raw_params))
+ assign_attributes(self.class.permit_attribute_params(raw_params))
+ save
+ end
+
+ def update_attributes! raw_params={}
+ assign_attributes(self.class.permit_attribute_params(raw_params))
+ save!
end
def save
end
def save
@@
-294,7
+325,10
@@
end
obdata.delete :uuid
resp = arvados_api_client.api(self.class, '/' + uuid, postdata)
else
obdata.delete :uuid
resp = arvados_api_client.api(self.class, '/' + uuid, postdata)
else
- postdata.merge!(@create_params) if @create_params
+ if @create_params
+ @create_params = @create_params.to_unsafe_hash if @create_params.is_a? ActionController::Parameters
+ postdata.merge!(@create_params)
+ end
resp = arvados_api_client.api(self.class, '', postdata)
end
return false if !resp[:etag] || !resp[:uuid]
resp = arvados_api_client.api(self.class, '', postdata)
end
return false if !resp[:etag] || !resp[:uuid]
@@
-320,6
+354,14
@@
end
self.save or raise Exception.new("Save failed")
end
self.save or raise Exception.new("Save failed")
end
+ def persisted?
+ (!new_record? && !destroyed?) ? true : false
+ end
+
+ def destroyed?
+ !(new_record? || etag || uuid)
+ end
+
def destroy
if etag || uuid
postdata = { '_method' => 'DELETE' }
def destroy
if etag || uuid
postdata = { '_method' => 'DELETE' }
@@
-497,17
+539,17
@@
end
if opts[:class].is_a? Class
return opts[:class]
end
if opts[:class].is_a? Class
return opts[:class]
end
- if uuid.match
/^[0-9a-f]{32}(\+[^,]+)*(,[0-9a-f]{32}(\+[^,]+)*)*$/
+ if uuid.match
(/^[0-9a-f]{32}(\+[^,]+)*(,[0-9a-f]{32}(\+[^,]+)*)*$/)
return Collection
end
resource_class = nil
return Collection
end
resource_class = nil
- uuid.match
/^[0-9a-z]{5}-([0-9a-z]{5})-[0-9a-z]{15}$/
do |re|
+ uuid.match
(/^[0-9a-z]{5}-([0-9a-z]{5})-[0-9a-z]{15}$/)
do |re|
resource_class ||= arvados_api_client.
kind_class(self.uuid_infix_object_kind[re[1]])
end
if opts[:referring_object] and
opts[:referring_attr] and
resource_class ||= arvados_api_client.
kind_class(self.uuid_infix_object_kind[re[1]])
end
if opts[:referring_object] and
opts[:referring_attr] and
- opts[:referring_attr].match
/_uuid$/
+ opts[:referring_attr].match
(/_uuid$/)
resource_class ||= arvados_api_client.
kind_class(opts[:referring_object].
attributes[opts[:referring_attr].
resource_class ||= arvados_api_client.
kind_class(opts[:referring_object].
attributes[opts[:referring_attr].