Module: JSONAPI::ResourceActions::SidepostingPrimaryFirst
- Extended by:
- ActiveSupport::Concern
- Included in:
- Sideposting
- Defined in:
- lib/json_api/controllers/concerns/resource_actions/sideposting_primary_first.rb
Instance Method Summary collapse
- #apply_lid_relationships_if_any(resource, lid_relationships, lid_resolver) ⇒ Object
- #build_lid_resolver_with_primary(data, resource) ⇒ Object
- #create_primary_and_lid_resolver(data) ⇒ Object
- #create_with_sidepost_primary_first ⇒ Object
- #render_created_with_sidepost(resource, processor) ⇒ Object
- #run_sidepost_processor(lid_resolver) ⇒ Object
Instance Method Details
#apply_lid_relationships_if_any(resource, lid_relationships, lid_resolver) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/json_api/controllers/concerns/resource_actions/sideposting_primary_first.rb', line 48 def apply_lid_relationships_if_any(resource, lid_relationships, lid_resolver) return if lid_relationships.blank? resolved = lid_resolver.resolve(lid_relationships) apply_resolved_relationships!(resource, resolved) end |
#build_lid_resolver_with_primary(data, resource) ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'lib/json_api/controllers/concerns/resource_actions/sideposting_primary_first.rb', line 28 def build_lid_resolver_with_primary(data, resource) lid_resolver = JSONAPI::Sideposting::LidResolver.new primary_lid = (data[:lid] || data["lid"]).to_s.presence if primary_lid type_name = RelationshipHelpers.resource_type_name(determine_sti_resource_class) lid_resolver.add(primary_lid, type: type_name, id: resource.id) end lid_resolver end |
#create_primary_and_lid_resolver(data) ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/json_api/controllers/concerns/resource_actions/sideposting_primary_first.rb', line 19 def create_primary_and_lid_resolver(data) resource = build_resource_from_resolved_data(data) (resource, action: :create) attach_active_storage_files(resource, , resource_class: determine_sti_resource_class) raise JSONAPI::Sideposting::PrimaryValidationError, resource unless resource.save [resource, build_lid_resolver_with_primary(data, resource)] end |
#create_with_sidepost_primary_first ⇒ Object
8 9 10 11 12 13 14 15 16 17 |
# File 'lib/json_api/controllers/concerns/resource_actions/sideposting_primary_first.rb', line 8 def create_with_sidepost_primary_first ActiveRecord::Base.transaction do data = raw_jsonapi_data.dup lid_relationships = extract_lid_relationships!(data) resource, lid_resolver = create_primary_and_lid_resolver(data) processor = run_sidepost_processor(lid_resolver) apply_lid_relationships_if_any(resource, lid_relationships, lid_resolver) render_created_with_sidepost(resource, processor) end end |
#render_created_with_sidepost(resource, processor) ⇒ Object
55 56 57 58 59 60 |
# File 'lib/json_api/controllers/concerns/resource_actions/sideposting_primary_first.rb', line 55 def render_created_with_sidepost(resource, processor) emit_resource_event(:created, resource) render json: serialize_resource_with_sidepost(resource, processor.created_records), status: :created, location: resource_url(resource) end |
#run_sidepost_processor(lid_resolver) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/json_api/controllers/concerns/resource_actions/sideposting_primary_first.rb', line 38 def run_sidepost_processor(lid_resolver) processor = JSONAPI::Sideposting::Processor.new( included: params[:included], controller: self, lid_resolver: lid_resolver, ) processor.create_all! processor end |