src/rs/FamilyView.js   A
last analyzed

Complexity

Total Complexity 17
Complexity/F 1.42

Size

Lines of Code 156
Function Count 12

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 0
c 1
b 0
f 0
nc 2
dl 0
loc 156
rs 10
wmc 17
mnd 1
bc 17
fnc 12
bpm 1.4166
cpm 1.4166
noi 2
1
module.exports = function(GedcomX){
2
  
3
  var utils = require('../utils'),
4
      Base = require('../Base');
5
  
6
  /**
7
   * A view of a family that consists of up to two parents and a list of children
8
   * who have that set of parents in common. While the Relationship data type 
9
   * carries the canonical information about the nature of the relationship
10
   * between the each pair of persons, the FamilyView is designed as a convenience
11
   * for display purposes.
12
   * 
13
   * {@link https://github.com/FamilySearch/gedcomx-rs/blob/master/specifications/rs-specification.md#family-view|GEDCOM X RS Spec}
14
   * 
15
   * @class FamilyView
16
   * @extends Base
17
   * @param {Object} [json]
18
   */
19
  var FamilyView = function(json){
20
    
21
    // Protect against forgetting the new keyword when calling the constructor
22
    if(!(this instanceof FamilyView)){
23
      return new FamilyView(json);
24
    }
25
    
26
    // If the given object is already an instance then just return it. DON'T copy it.
27
    if(FamilyView.isInstance(json)){
28
      return json;
29
    }
30
    
31
    this.init(json);
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
32
  };
33
  
34
  FamilyView.prototype = Object.create(Base.prototype);
35
  
36
  FamilyView._gedxClass = FamilyView.prototype._gedxClass = 'GedcomX.FamilyView';
37
  
38
  FamilyView.jsonProps = [
39
    'parent1',
40
    'parent2',
41
    'children'
42
  ];
43
  
44
  /**
45
   * Check whether the given object is an instance of this class.
46
   * 
47
   * @param {Object} obj
48
   * @returns {Boolean}
49
   */
50
  FamilyView.isInstance = function(obj){
51
    return utils.isInstance(obj, this._gedxClass);
52
  };
53
54
  /**
55
   * Initialize from JSON
56
   * 
57
   * @param {Object}
0 ignored issues
show
Documentation introduced by
The parameter * does not exist. Did you maybe forget to remove this comment?
Loading history...
58
   * @return {FamilyView} this
59
   */
60
  FamilyView.prototype.init = function(json){
61
    
62
    Base.prototype.init.call(this, json);
63
    
64
    if(json){
65
      this.setParent1(json.parent1);
66
      this.setParent2(json.parent2);
67
      this.setChildren(json.children);
68
    }
69
    return this;
70
  };
71
  
72
  /**
73
   * Set parent1
74
   * 
75
   * @param {ResourceReference} parent1
76
   * @return {FamilyView} this
77
   */
78
  FamilyView.prototype.setParent1 = function(parent1){
79
    if(parent1){
80
      this.parent1 = GedcomX.ResourceReference(parent1);
81
    }
82
    return this;
83
  };
84
  
85
  /**
86
   * Get parent1
87
   * 
88
   * @return {ResourceReference}
89
   */
90
  FamilyView.prototype.getParent1 = function(){
91
    return this.parent1;
92
  };
93
  
94
  /**
95
   * Set parent2
96
   * 
97
   * @param {ResourceReference} parent2
98
   * @return {FamilyView} this
99
   */
100
  FamilyView.prototype.setParent2 = function(parent2){
101
    if(parent2){
102
      this.parent2 = GedcomX.ResourceReference(parent2);
103
    }
104
    return this;
105
  };
106
  
107
  /**
108
   * Get parent2
109
   * 
110
   * @return {ResourceReference}
111
   */
112
  FamilyView.prototype.getParent2 = function(){
113
    return this.parent2;
114
  };
115
  
116
  /**
117
   * Get children
118
   * 
119
   * @return {ResourceReference[]} children
120
   */
121
  FamilyView.prototype.getChildren = function(){
122
    return this.children || [];
123
  };
124
  
125
  /**
126
   * Set children
127
   * 
128
   * @param {ResourceReference[]} children
129
   * @return {FamilyView} this
130
   */
131
  FamilyView.prototype.setChildren = function(children){
132
    return this._setArray(children, 'children', 'addChild');
133
  };
134
  
135
  /**
136
   * Add a child
137
   * 
138
   * @param {ResourceReference} child
139
   * @return {FamilyView} this
140
   */
141
  FamilyView.prototype.addChild = function(child){
142
    return this._arrayPush(child, 'children', GedcomX.ResourceReference);
143
  };
144
  
145
  /**
146
   * Export the object as JSON
147
   * 
148
   * @return {Object} JSON object
149
   */
150
  FamilyView.prototype.toJSON = function(){
151
    return this._toJSON(Base, FamilyView.jsonProps);
152
  };
153
  
154
  GedcomX.FamilyView = FamilyView;
155
  
156
};