lib/isomorfeus/data/handler/generic.rb in isomorfeus-data-1.0.0.zeta14 vs lib/isomorfeus/data/handler/generic.rb in isomorfeus-data-1.0.0.zeta15

- old
+ new

@@ -22,10 +22,11 @@ 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 '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 end @@ -36,10 +37,31 @@ end rescue Exception => e response_agent.error = { error: "Isomorfeus::Data::Handler::Generic: #{e.message}\n#{e.backtrace.join("\n")}" } end + 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]['save'] + instance_data = data['instance'] + included_items_data = data.key?('included_items') ? data['included_items'] : nil + if Isomorfeus.current_user.authorized?(type_class, :create, 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) + if created_type.respond_to?(:included_items_to_transport) + response_agent.outer_result.deep_merge!(data: created_type.included_items_to_transport) + end + response_agent.agent_result = { success: 'ok' } + else response_agent.error = { error: { type_class_name => 'Create 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) @@ -57,15 +79,13 @@ end end def process_execute(response_agent, type_class, type_class_name) # 'Isomorfeus::Data::Handler::Generic', self.name, :execute, props_json - props_json = response_agent.request[type_class_name]['execute'] - props = Oj.load(props_json, mode: :strict) + props = response_agent.request[type_class_name]['execute'] props.transform_keys!(&:to_sym) - props[:props].transform_keys!(&:to_sym) - if Isomorfeus.current_user.authorized?(type_class, :execute, props[:props]) + 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) @@ -83,10 +103,10 @@ 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) instance = type_class.instance_from_transport(instance_data, included_items_data) - saved_type = type_class.save(instance: instance) + 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) if saved_type.respond_to?(:included_items_to_transport) response_agent.outer_result.deep_merge!(data: saved_type.included_items_to_transport)