Skip to content

Commit ed36e13

Browse files
committed
Make the whole data model immutable
1 parent 586db05 commit ed36e13

18 files changed

+126
-754
lines changed

README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,43 @@ the corresponding serializer, and send back to the API.
1717

1818
## Release notes
1919

20+
### 5.0.0 (dev)
21+
22+
* The whole data model is now immutable:
23+
** Removed `Claim.setMainSnak`
24+
** Removed `Claim.setQualifiers`
25+
** Removed `Entity.setFingerprint`
26+
** Removed `Fingerprint.removeAliases`
27+
** Removed `Fingerprint.removeAliasesFor`
28+
** Removed `Fingerprint.removeDescription`
29+
** Removed `Fingerprint.removeDescriptionFor`
30+
** Removed `Fingerprint.removeLabel`
31+
** Removed `Fingerprint.removeLabelFor`
32+
** Removed `Fingerprint.setAliases`
33+
** Removed `Fingerprint.setDescription`
34+
** Removed `Fingerprint.setLabel`
35+
** Made `Group.setItemContainer` private
36+
** Removed `Item.addSiteLink`
37+
** Removed `Item.addStatement`
38+
** Removed `Item.removeSiteLink`
39+
** Removed `Item.removeStatement`
40+
** Removed `MultiTerm.setLanguageCode`
41+
** Removed `MultiTerm.setTexts`
42+
** Removed `Property.addStatement`
43+
** Removed `Property.removeStatement`
44+
** Removed `SiteLink.setBadges`
45+
** Removed `SnakList.getValidMoveIndices`
46+
** Removed `SnakList.merge`
47+
** Removed `SnakList.move`
48+
** Removed `SnakList.moveDown`
49+
** Removed `SnakList.moveUp`
50+
** Removed `Statement.setClaim`
51+
** Made `Statement.setRank` private
52+
** Removed `Statement.setReferences`
53+
** Removed `Term.setLanguageCode`
54+
** Removed `Term.setText`
55+
56+
2057
### 4.0.0 (2017-10-09)
2158

2259
* Made the library a pure JavaScript library.

src/Claim.js

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,20 @@
1414
* @param {wikibase.datamodel.SnakList|null} [qualifiers=new wikibase.datamodel.SnakList()]
1515
* @param {string|null} [guid=null] The Global Unique Identifier of this Claim. Can be null if this
1616
* is a new Claim, not yet stored in the database and associated with some entity.
17+
*
18+
* @throws {Error} if parameter is not a Snak instance.
19+
* @throws {Error} if parameter is not a SnakList instance.
1720
*/
1821
var SELF = wb.datamodel.Claim = function WbDataModelClaim( mainSnak, qualifiers, guid ) {
19-
this.setMainSnak( mainSnak );
20-
this.setQualifiers( qualifiers || new wb.datamodel.SnakList() );
22+
if( !( mainSnak instanceof wb.datamodel.Snak ) ) {
23+
throw new Error( 'Main snak needs to be a Snak instance' );
24+
}
25+
if( qualifiers && !( qualifiers instanceof wb.datamodel.SnakList ) ) {
26+
throw new Error( 'Qualifiers have to be a SnakList object' );
27+
}
28+
29+
this._mainSnak = mainSnak;
30+
this._qualifiers = qualifiers || new wb.datamodel.SnakList();
2131
this._guid = guid || null;
2232
};
2333

@@ -62,39 +72,13 @@ $.extend( SELF.prototype, {
6272
return this._mainSnak;
6373
},
6474

65-
/**
66-
* Overwrites the current main Snak.
67-
*
68-
* @param {wikibase.datamodel.Snak} mainSnak
69-
*
70-
* @throws {Error} if parameter is not a Snak instance.
71-
*/
72-
setMainSnak: function( mainSnak ) {
73-
if( !( mainSnak instanceof wb.datamodel.Snak ) ) {
74-
throw new Error( 'Main snak needs to be a Snak instance' );
75-
}
76-
this._mainSnak = mainSnak;
77-
},
78-
7975
/**
8076
* @return {wikibase.datamodel.SnakList}
8177
*/
8278
getQualifiers: function() {
8379
return this._qualifiers;
8480
},
8581

86-
/**
87-
* @param {wikibase.datamodel.SnakList} qualifiers
88-
*
89-
* @throws {Error} if parameter is not a SnakList instance.
90-
*/
91-
setQualifiers: function( qualifiers ) {
92-
if( !( qualifiers instanceof wb.datamodel.SnakList ) ) {
93-
throw new Error( 'Qualifiers have to be a SnakList object' );
94-
}
95-
this._qualifiers = qualifiers;
96-
},
97-
9882
/**
9983
* @param {*} claim
10084
* @return {boolean}

src/Entity.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,6 @@ $.extend( SELF.prototype, {
5454
return this._fingerprint;
5555
},
5656

57-
/**
58-
* @param {wikibase.datamodel.Fingerprint} fingerprint
59-
*/
60-
setFingerprint: function( fingerprint ) {
61-
this._fingerprint = fingerprint;
62-
},
63-
6457
/**
6558
* Returns what type of Entity this is.
6659
*

src/Fingerprint.js

Lines changed: 0 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -90,33 +90,6 @@ $.extend( SELF.prototype, {
9090
return this._labels.hasItemForKey( languageCode );
9191
},
9292

93-
/**
94-
* @param {string} languageCode
95-
* @param {wikibase.datamodel.Term|null} term
96-
*/
97-
setLabel: function( languageCode, term ) {
98-
if ( term === null || term.getText() === '' ) {
99-
this._labels.removeItemByKey( languageCode );
100-
} else {
101-
this._labels.setItem( languageCode, term );
102-
}
103-
},
104-
105-
/**
106-
* @param {string} languageCode
107-
* @param {wikibase.datamodel.Term} label
108-
*/
109-
removeLabel: function( languageCode, label ) {
110-
this._labels.removeItem( languageCode, label );
111-
},
112-
113-
/**
114-
* @param {string} languageCode
115-
*/
116-
removeLabelFor: function( languageCode ) {
117-
this._labels.removeItemByKey( languageCode );
118-
},
119-
12093
/**
12194
* @return {wikibase.datamodel.TermMap}
12295
*/
@@ -149,33 +122,6 @@ $.extend( SELF.prototype, {
149122
return this._descriptions.hasItemForKey( languageCode );
150123
},
151124

152-
/**
153-
* @param {string} languageCode
154-
* @param {wikibase.datamodel.Term|null} term
155-
*/
156-
setDescription: function( languageCode, term ) {
157-
if ( term === null || term.getText() === '' ) {
158-
this._descriptions.removeItemByKey( languageCode );
159-
} else {
160-
this._descriptions.setItem( languageCode, term );
161-
}
162-
},
163-
164-
/**
165-
* @param {string} languageCode
166-
* @param {wikibase.datamodel.Term} description
167-
*/
168-
removeDescription: function( languageCode, description ) {
169-
this._descriptions.removeItem( languageCode, description );
170-
},
171-
172-
/**
173-
* @param {string} languageCode
174-
*/
175-
removeDescriptionFor: function( languageCode ) {
176-
this._descriptions.removeItemByKey( languageCode );
177-
},
178-
179125
/**
180126
* @return {wikibase.datamodel.MultiTermMap}
181127
*/
@@ -208,60 +154,6 @@ $.extend( SELF.prototype, {
208154
return this._aliases.hasItemForKey( languageCode );
209155
},
210156

211-
/**
212-
* @param {string|wikibase.datamodel.MultiTermMap} languageCodeOrAliases
213-
* @param {wikibase.datamodel.MultiTerm|null} [aliases]
214-
*
215-
* @throws {Error} when passing a MultiTerm without a language code.
216-
* @throws {Error} when passing a MultiTermMap with a language code.
217-
* @throws {Error} when neither passing a MultiTerm nor a MultiTermMap object.
218-
*/
219-
setAliases: function( languageCodeOrAliases, aliases ) {
220-
var languageCode;
221-
222-
if( typeof languageCodeOrAliases === 'string' ) {
223-
languageCode = languageCodeOrAliases;
224-
} else {
225-
aliases = languageCodeOrAliases;
226-
}
227-
228-
if( aliases === null || aliases instanceof wb.datamodel.MultiTerm ) {
229-
if( !languageCode ) {
230-
throw new Error( 'Language code the wb.datamodel.MultiTerm object should be set '
231-
+ 'for needs to be specified' );
232-
}
233-
if ( aliases === null || aliases.isEmpty() ) {
234-
this._aliases.removeItemByKey( languageCode );
235-
} else {
236-
this._aliases.setItem( languageCode, aliases );
237-
}
238-
} else if( aliases instanceof wb.datamodel.MultiTermMap ) {
239-
if( languageCode ) {
240-
throw new Error( 'Unable to handle language code when setting a '
241-
+ 'wb.datamodel.MultiTermMap' );
242-
}
243-
this._aliases = aliases;
244-
} else {
245-
throw new Error( 'Aliases need to be specified as wb.datamodel.MultiTerm or '
246-
+ 'wb.datamodel.MultiTermMap instance' );
247-
}
248-
},
249-
250-
/**
251-
* @param {string} languageCode
252-
* @param {wikibase.datamodel.MultiTerm} aliases
253-
*/
254-
removeAliases: function( languageCode, aliases ) {
255-
this._aliases.removeItem( languageCode, aliases );
256-
},
257-
258-
/**
259-
* @param {string} languageCode
260-
*/
261-
removeAliasesFor: function( languageCode ) {
262-
this._aliases.removeItemByKey( languageCode );
263-
},
264-
265157
/**
266158
* @return {boolean}
267159
*/

src/Group.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ $.extend( SELF.prototype, {
7979

8080
/**
8181
* @param {wikibase.datamodel.GroupableCollection} groupableCollection
82-
*
8382
* @throws {Error} when passed GroupableCollection instance contains an item whose key does not
8483
* match the key registered with the Group instance.
84+
* @private
8585
*/
8686
setItemContainer: function( groupableCollection ) {
8787
if( !( groupableCollection instanceof wb.datamodel.GroupableCollection ) ) {

src/Item.js

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,6 @@ var SELF = wb.datamodel.Item = util.inherit(
6262
return this._siteLinkSet;
6363
},
6464

65-
/**
66-
* @param {wikibase.datamodel.SiteLink} siteLink
67-
*/
68-
addSiteLink: function( siteLink ) {
69-
this._siteLinkSet.setSiteLink( siteLink );
70-
},
71-
72-
/**
73-
* @param {wikibase.datamodel.SiteLink} siteLink
74-
*/
75-
removeSiteLink: function( siteLink ) {
76-
this._siteLinkSet.removeSiteLink( siteLink );
77-
},
78-
7965
/**
8066
* @return {wikibase.datamodel.StatementGroupSet}
8167
*/

src/MultiTerm.js

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,20 @@
1212
*
1313
* @param {string} languageCode
1414
* @param {string[]} texts
15+
*
16+
* @throws {Error} when the language code is not a string or empty.
17+
* @throws {Error} when texts is not an array.
1518
*/
1619
var SELF = wb.datamodel.MultiTerm = function WbDataModelMultiTerm( languageCode, texts ) {
17-
this.setLanguageCode( languageCode );
18-
this.setTexts( texts );
20+
if( typeof languageCode !== 'string' || languageCode === '' ) {
21+
throw new Error( 'Language code has to be a non-empty string' );
22+
}
23+
if( !$.isArray( texts ) ) {
24+
throw new Error( 'texts needs to be an array of strings' );
25+
}
26+
27+
this._languageCode = languageCode;
28+
this._texts = texts;
1929
};
2030

2131
/**
@@ -41,37 +51,13 @@ $.extend( SELF.prototype, {
4151
return this._languageCode;
4252
},
4353

44-
/**
45-
* @param {string} languageCode
46-
*
47-
* @throws {Error} when the language code is not a string or empty.
48-
*/
49-
setLanguageCode: function( languageCode ) {
50-
if( typeof languageCode !== 'string' || languageCode === '' ) {
51-
throw new Error( 'Language code has to be a non-empty string' );
52-
}
53-
this._languageCode = languageCode;
54-
},
55-
5654
/**
5755
* @return {string[]}
5856
*/
5957
getTexts: function() {
6058
return this._texts;
6159
},
6260

63-
/**
64-
* @param {string[]} texts
65-
*
66-
* @throws {Error} when texts is not an array.
67-
*/
68-
setTexts: function( texts ) {
69-
if( !$.isArray( texts ) ) {
70-
throw new Error( 'texts needs to be an array of strings' );
71-
}
72-
this._texts = texts;
73-
},
74-
7561
/**
7662
* @param {*} multiTerm
7763
* @return {boolean}

src/SiteLink.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,6 @@ $.extend( SELF.prototype, {
6262
return this._pageName;
6363
},
6464

65-
/**
66-
* @param {string[]} [badges=[]]
67-
*/
68-
setBadges: function( badges ) {
69-
this._badges = badges || [];
70-
},
71-
7265
/**
7366
* @return {string[]}
7467
*/

0 commit comments

Comments
 (0)