Module: DirectionalRelationships::ClassMethods
- Defined in:
- backend/app/model/mixins/directional_relationships.rb
Instance Attribute Summary (collapse)
-
- (Object) directional_relationships
readonly
Returns the value of attribute directional_relationships.
Instance Method Summary (collapse)
-
- (Object) create_from_json(json, opts = {})
-
- (Object) define_directional_relationship(opts)
-
- (Object) prepare_directional_relationship_for_display(json)
-
- (Object) prepare_directional_relationship_for_storage(json)
-
- (Object) sequel_to_jsonmodel(objs, opts = {})
Instance Attribute Details
- (Object) directional_relationships (readonly)
Returns the value of attribute directional_relationships
52 53 54 |
# File 'backend/app/model/mixins/directional_relationships.rb', line 52 def directional_relationships @directional_relationships end |
Instance Method Details
- (Object) create_from_json(json, opts = {})
113 114 115 116 |
# File 'backend/app/model/mixins/directional_relationships.rb', line 113 def create_from_json(json, opts = {}) prepare_directional_relationship_for_storage(json) super end |
- (Object) define_directional_relationship(opts)
54 55 56 57 58 |
# File 'backend/app/model/mixins/directional_relationships.rb', line 54 def define_directional_relationship(opts) self.define_relationship(opts) @directional_relationships ||= [] @directional_relationships << opts end |
- (Object) prepare_directional_relationship_for_display(json)
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'backend/app/model/mixins/directional_relationships.rb', line 79 def prepare_directional_relationship_for_display(json) Array(directional_relationships).each do |rel| property = rel[:json_property] ASUtils.wrap(json[property]).each do |relationship| ref = JSONModel.parse_reference(json.uri) if (relationship['relationship_target_record_type'] == ref[:type] && relationship['relationship_target_id'] == ref[:id].to_i) # This means we're looking at the relationship from the other side. # # For example, if the relationship is "A is a parent of B", then we # want: # # * 'GET A' to yield {relator => 'is_parent_of', ref => 'B'} # * 'GET B' to yield {relator => 'is_child_of', ref => 'A'} # # So we want to invert the relator for this case. relator_values = JSONModel.enum_values(JSONModel(relationship['jsonmodel_type'].intern).schema['properties']['relator']['dynamic_enum']) relator_values -= ['other_unmapped'] # grumble. if relator_values.length == 2 # When there are two possible values we assume they're inverses # Set the relator to whatever the inverse of the current one is. relationship['relator'] = (relator_values - [relationship['relator']]).first end end end end end |
- (Object) prepare_directional_relationship_for_storage(json)
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'backend/app/model/mixins/directional_relationships.rb', line 61 def prepare_directional_relationship_for_storage(json) Array(directional_relationships).each do |rel| property = rel[:json_property] ASUtils.wrap(json[property]).each do |relationship| # Relationships are directionless by default, but here we want to # store a direction (e.g. A is a child of B) # # Store the JSONModel type and ID # ref = JSONModel.parse_reference(relationship['ref']) relationship['relationship_target_record_type'] = ref[:type] relationship['relationship_target_id'] = ref[:id].to_i end end end |
- (Object) sequel_to_jsonmodel(objs, opts = {})
119 120 121 122 123 124 125 126 127 |
# File 'backend/app/model/mixins/directional_relationships.rb', line 119 def sequel_to_jsonmodel(objs, opts = {}) jsons = super jsons.zip(objs).each do |json, obj| prepare_directional_relationship_for_display(json) end jsons end |