Skip to content

Commit 57badee

Browse files
committed
Add hasTrait to ModelClass, & model instances (resolves #377)
1 parent 2bb6d76 commit 57badee

File tree

9 files changed

+119
-11
lines changed

9 files changed

+119
-11
lines changed

Gulpfile.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ var modularized = {
133133
'./src/lib/plugins/methods.js',
134134
'./src/lib/plugins/ready.js',
135135
'./src/lib/plugins/refresh.js',
136-
'./src/lib/plugins/traits.js'
136+
'./src/lib/plugins/traits.js',
137+
'./src/lib/plugins/hasTrait.js'
137138
],
138139
modules: {
139140
S: [ // searching

bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rekord",
3-
"version": "1.5.6",
3+
"version": "1.5.7",
44
"homepage": "https://github.com/Rekord/rekord",
55
"authors": [
66
"Philip Diffenderfer <pdiffenderfer@gmail.com>"

build/rekord.js

+38-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* rekord 1.5.6 - A javascript REST ORM that is offline and real-time capable http://rekord.github.io/rekord/ by Philip Diffenderfer */
1+
/* rekord 1.5.7 - A javascript REST ORM that is offline and real-time capable http://rekord.github.io/rekord/ by Philip Diffenderfer */
22
// UMD (Universal Module Definition)
33
(function (root, factory)
44
{
@@ -3881,6 +3881,7 @@ var Defaults = Database.Defaults =
38813881
comparator: null,
38823882
comparatorNullsFirst: null,
38833883
revision: null,
3884+
traits: [],
38843885
cascade: Cascade.All,
38853886
load: Load.None,
38863887
allComplete: false,
@@ -4940,6 +4941,26 @@ Class.create( Database,
49404941
return filtered;
49414942
},
49424943

4944+
hasTrait: function(trait, comparator)
4945+
{
4946+
var cmp = comparator || equals;
4947+
4948+
return isArray( this.traits ) && indexOf( this.traits, trait, cmp ) !== false;
4949+
},
4950+
4951+
hasTraits: function(traits, comparator)
4952+
{
4953+
for (var i = 0; i < traits.length; i++)
4954+
{
4955+
if ( !this.hasTrait( traits[ i ], comparator ) )
4956+
{
4957+
return false;
4958+
}
4959+
}
4960+
4961+
return true;
4962+
},
4963+
49434964
liveSave: function(key, encoded)
49444965
{
49454966
this.putRemoteData( encoded, key );
@@ -18244,6 +18265,22 @@ addPlugin(function(model, db, options)
1824418265
});
1824518266

1824618267

18268+
addPlugin( function(model, db, options)
18269+
{
18270+
18271+
model.hasTrait = function(trait, comparator)
18272+
{
18273+
return db.hasTrait(trait, comparator);
18274+
};
18275+
18276+
model.hasTraits = function(traits, comparator)
18277+
{
18278+
return db.hasTraits(traits, comparator);
18279+
};
18280+
18281+
});
18282+
18283+
1824718284
addPlugin( function(model, db, options)
1824818285
{
1824918286
if ( options.keyChanges )

build/rekord.min.js

+6-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/rekord.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rekord",
3-
"version": "1.5.6",
3+
"version": "1.5.7",
44
"description": "A javascript REST ORM that is offline and real-time capable http://rekord.github.io/rekord/",
55
"author": "Philip Diffenderfer",
66
"license": "MIT",

src/lib/Database.js

+21
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ var Defaults = Database.Defaults =
202202
comparator: null,
203203
comparatorNullsFirst: null,
204204
revision: null,
205+
traits: [],
205206
cascade: Cascade.All,
206207
load: Load.None,
207208
allComplete: false,
@@ -1261,6 +1262,26 @@ Class.create( Database,
12611262
return filtered;
12621263
},
12631264

1265+
hasTrait: function(trait, comparator)
1266+
{
1267+
var cmp = comparator || equals;
1268+
1269+
return isArray( this.traits ) && indexOf( this.traits, trait, cmp ) !== false;
1270+
},
1271+
1272+
hasTraits: function(traits, comparator)
1273+
{
1274+
for (var i = 0; i < traits.length; i++)
1275+
{
1276+
if ( !this.hasTrait( traits[ i ], comparator ) )
1277+
{
1278+
return false;
1279+
}
1280+
}
1281+
1282+
return true;
1283+
},
1284+
12641285
liveSave: function(key, encoded)
12651286
{
12661287
this.putRemoteData( encoded, key );

src/lib/plugins/hasTrait.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
addPlugin( function(model, db, options)
3+
{
4+
5+
model.hasTrait = function(trait, comparator)
6+
{
7+
return db.hasTrait(trait, comparator);
8+
};
9+
10+
model.hasTraits = function(traits, comparator)
11+
{
12+
return db.hasTraits(traits, comparator);
13+
};
14+
15+
});

test/cases/rekorddatabase-instance-functions.js

+34
Original file line numberDiff line numberDiff line change
@@ -785,3 +785,37 @@ test( 'reset_failure', function(assert)
785785

786786
online();
787787
});
788+
789+
test( 'hasTrait', function(assert)
790+
{
791+
var prefix = 'Database_hasTrait_';
792+
793+
var Trait1 = {
794+
load: Rekord.Load.All
795+
};
796+
var Trait2 = {
797+
store: false
798+
};
799+
var TraitFunction = function(field, value) {
800+
var trait = {};
801+
trait[ field ] = value;
802+
return trait;
803+
};
804+
805+
var Task = Rekord({
806+
name: prefix + 'task',
807+
fields: ['name'],
808+
traits: [
809+
Trait1,
810+
TraitFunction('rest', false)
811+
]
812+
});
813+
814+
ok( Task.hasTrait( Trait1 ) );
815+
notOk( Task.hasTrait( Trait2 ) );
816+
ok( Task.hasTrait( TraitFunction('rest', false) ) );
817+
818+
ok( Task.Database.load === Rekord.Load.All );
819+
ok( Task.Database.store !== false );
820+
ok( Task.Database.rest instanceof TestRest === false );
821+
});

0 commit comments

Comments
 (0)