lib/isomorfeus/data/handler/generic.rb in isomorfeus-data-2.0.22 vs lib/isomorfeus/data/handler/generic.rb in isomorfeus-data-2.1.0
- old
+ new
@@ -17,11 +17,11 @@
type_class = Isomorfeus.cached_data_class(type_class_name)
if type_class
response_agent.request[type_class_name].each_key do |action|
case action
when 'load' then process_load(response_agent, type_class, type_class_name)
- when 'query' then process_query(response_agent, type_class, type_class_name)
+ when 'execute' then process_execute(response_agent, type_class, type_class_name)
when 'create' then process_create(response_agent, type_class, type_class_name)
when 'save' then process_save(response_agent, type_class, type_class_name)
when 'destroy' then process_destroy(response_agent, type_class, type_class_name)
else response_agent.error = { error: { action => 'No such thing!' }}
end
@@ -38,11 +38,11 @@
def process_create(response_agent, type_class, type_class_name)
# 'Isomorfeus::Data::Handler::Generic', self.name, :create, data_hash
data = response_agent.request[type_class_name]['create']
instance_data = data['instance']
included_items_data = data.key?('included_items') ? data['included_items'] : nil
- if Isomorfeus.current_user.authorized?(type_class, :create, data)
+ if Isomorfeus.current_user.authorized?(type_class, :create, type_class.props_from_data(instance_data))
instance = type_class.instance_from_transport(instance_data, included_items_data)
created_type = instance.create
if created_type
response_agent.outer_result = {} unless response_agent.outer_result
response_agent.outer_result.deep_merge!(data: created_type.to_transport)
@@ -54,10 +54,29 @@
end
else response_agent.error = { error: 'Access denied!' }
end
end
+ def process_execute(response_agent, type_class, type_class_name)
+ # 'Isomorfeus::Data::Handler::Generic', self.name, :execute, props_json
+ props = response_agent.request[type_class_name]['execute']
+ props.transform_keys!(&:to_sym)
+ if Isomorfeus.current_user.authorized?(type_class, :execute, props)
+ queried_type = type_class.execute(**props)
+ if queried_type
+ response_agent.outer_result = {} unless response_agent.outer_result
+ response_agent.outer_result.deep_merge!(data: queried_type.to_transport)
+ if queried_type.respond_to?(:included_items_to_transport)
+ response_agent.outer_result.deep_merge!(data: queried_type.included_items_to_transport)
+ end
+ response_agent.agent_result = { success: 'ok' }
+ else response_agent.error = { error: { type_class_name => 'Query returned nothing!' }}
+ end
+ else response_agent.error = { error: 'Access denied!' }
+ end
+ end
+
def process_load(response_agent, type_class, type_class_name)
# 'Isomorfeus::Data::Handler::Generic', self.name, :load, key: key
props = response_agent.request[type_class_name]['load']
props.transform_keys!(&:to_sym)
if Isomorfeus.current_user.authorized?(type_class, :load, props)
@@ -73,34 +92,15 @@
end
else response_agent.error = { error: 'Access denied!' }
end
end
- def process_query(response_agent, type_class, type_class_name)
- # 'Isomorfeus::Data::Handler::Generic', self.name, :query, props_json
- props = response_agent.request[type_class_name]['query']
- props.transform_keys!(&:to_sym)
- if Isomorfeus.current_user.authorized?(type_class, :query, props)
- queried_type = type_class.execute(**props)
- if queried_type
- response_agent.outer_result = {} unless response_agent.outer_result
- response_agent.outer_result.deep_merge!(data: queried_type.to_transport)
- if queried_type.respond_to?(:included_items_to_transport)
- response_agent.outer_result.deep_merge!(data: queried_type.included_items_to_transport)
- end
- response_agent.agent_result = { success: 'ok' }
- else response_agent.error = { error: { type_class_name => 'Query returned nothing!' }}
- end
- else response_agent.error = { error: 'Access denied!' }
- end
- end
-
def process_save(response_agent, type_class, type_class_name)
# 'Isomorfeus::Data::Handler::Generic', self.name, :save, data_hash
data = response_agent.request[type_class_name]['save']
instance_data = data['instance']
included_items_data = data.key?('included_items') ? data['included_items'] : nil
- if Isomorfeus.current_user.authorized?(type_class, :save, data)
+ if Isomorfeus.current_user.authorized?(type_class, :save, type_class.props_from_data(instance_data))
instance = type_class.instance_from_transport(instance_data, included_items_data)
saved_type = instance.save
if saved_type
response_agent.outer_result = {} unless response_agent.outer_result
response_agent.outer_result.deep_merge!(data: saved_type.to_transport)