Class: BiologicalAssociations::CreateWithAnatomicalParts
- Inherits:
-
Object
- Object
- BiologicalAssociations::CreateWithAnatomicalParts
- Defined in:
- lib/biological_associations/create_with_anatomical_parts.rb
Instance Attribute Summary collapse
-
#biological_association ⇒ Object
readonly
Returns the value of attribute biological_association.
Instance Method Summary collapse
-
#base_attributes ⇒ Object
private
Symbol keys work because @params is a HashWithIndifferentAccess (set in #initialize via to_h).
- #build_association_end(id:, type:, anatomical_part_attributes:, taxon_determination_attributes:) ⇒ Object private
- #build_object ⇒ Object private
- #build_subject ⇒ Object private
- #call ⇒ Object
- #create_anatomical_part(origin, anatomical_part_attributes) ⇒ Object private
- #create_taxon_determination_if_needed(origin, taxon_determination_attributes) ⇒ Object private
-
#initialize(params) ⇒ CreateWithAnatomicalParts
constructor
A new instance of CreateWithAnatomicalParts.
- #param(key) ⇒ Object private
Constructor Details
#initialize(params) ⇒ CreateWithAnatomicalParts
Returns a new instance of CreateWithAnatomicalParts.
5 6 7 8 9 10 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 5 def initialize(params) # ActionController::Parameters#to_h returns a HashWithIndifferentAccess # recursively, so all nested attributes are accessible by symbol key. @params = params.to_h @biological_association = nil end |
Instance Attribute Details
#biological_association ⇒ Object (readonly)
Returns the value of attribute biological_association.
3 4 5 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 3 def biological_association @biological_association end |
Instance Method Details
#base_attributes ⇒ Object (private)
Symbol keys work because @params is a HashWithIndifferentAccess (set in #initialize via to_h).
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 38 def base_attributes @params.except( :subject_anatomical_part_attributes, :object_anatomical_part_attributes, :subject_taxon_determination_attributes, :object_taxon_determination_attributes, :biological_association_subject_id, :biological_association_subject_type, :biological_association_object_id, :biological_association_object_type ) end |
#build_association_end(id:, type:, anatomical_part_attributes:, taxon_determination_attributes:) ⇒ Object (private)
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 69 def build_association_end(id:, type:, anatomical_part_attributes:, taxon_determination_attributes:) raise ArgumentError, "#{type.inspect} is not a valid type for biological associations" unless BIOLOGICALLY_RELATABLE_TYPES.include?(type) origin = type.constantize.find(id) return origin if anatomical_part_attributes.blank? create_taxon_determination_if_needed(origin, taxon_determination_attributes) create_anatomical_part(origin, anatomical_part_attributes) end |
#build_object ⇒ Object (private)
60 61 62 63 64 65 66 67 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 60 def build_object build_association_end( id: param(:biological_association_object_id), type: param(:biological_association_object_type), anatomical_part_attributes: param(:object_anatomical_part_attributes), taxon_determination_attributes: param(:object_taxon_determination_attributes) ) end |
#build_subject ⇒ Object (private)
51 52 53 54 55 56 57 58 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 51 def build_subject build_association_end( id: param(:biological_association_subject_id), type: param(:biological_association_subject_type), anatomical_part_attributes: param(:subject_anatomical_part_attributes), taxon_determination_attributes: param(:subject_taxon_determination_attributes) ) end |
#call ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 12 def call begin ActiveRecord::Base.transaction do subject = build_subject object = build_object @biological_association = BiologicalAssociation.new(base_attributes) @biological_association.biological_association_subject = subject @biological_association.biological_association_object = object @biological_association.save! end rescue ActiveRecord::RecordInvalid, ArgumentError => e if @biological_association.nil? @biological_association = BiologicalAssociation.new @biological_association.errors.add(:base, e.) end end @biological_association end |
#create_anatomical_part(origin, anatomical_part_attributes) ⇒ Object (private)
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 94 def create_anatomical_part(origin, anatomical_part_attributes) attributes = { name: anatomical_part_attributes[:name], uri: anatomical_part_attributes[:uri], uri_label: anatomical_part_attributes[:uri_label], is_material: anatomical_part_attributes[:is_material], preparation_type_id: anatomical_part_attributes[:preparation_type_id] } attributes[:is_material] = AnatomicalPart.default_is_material_for(origin) if attributes[:is_material].nil? anatomical_part = AnatomicalPart.new( attributes.merge( inbound_origin_relationship_attributes: { old_object_id: origin.id, old_object_type: origin.class.base_class.name } ) ) anatomical_part.save! anatomical_part end |
#create_taxon_determination_if_needed(origin, taxon_determination_attributes) ⇒ Object (private)
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 81 def create_taxon_determination_if_needed(origin, taxon_determination_attributes) return unless ['CollectionObject'].include?(origin.class.base_class.name) return unless origin.taxon_determinations.empty? return if taxon_determination_attributes.blank? taxon_determination = TaxonDetermination.new( taxon_determination_object: origin, otu_id: taxon_determination_attributes[:otu_id] ) taxon_determination.save! end |
#param(key) ⇒ Object (private)
118 119 120 |
# File 'lib/biological_associations/create_with_anatomical_parts.rb', line 118 def param(key) @params[key] end |