Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ A pure javascript library to help you query jo data.

joData creates a javascript object that represents an oData query. This allows you to easily modify parts of your oData query without effecting the rest of it.

joData's goal is to implement

All methods in joData are chainable.

##NOTE:
Expand Down Expand Up @@ -970,6 +968,18 @@ Output:
Output:

$filter=ceiling(Price) eq 2

###Raw Parameters

To add parameters onto the query outside of joData, you may use the Raw function.

####raw(parameter, value)

query.raw('ParameterName',"'ParameterValue'")

Output:

ParameterName='ParameterValue'

##Saving Local

Expand Down
77 changes: 42 additions & 35 deletions example/tests.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,41 +6,48 @@
<body>
<script>
(function () {
//var test = new joData('http://foo.bar');

var j = new joData('http://foo.bar');
j.filter(new joData.FilterClause('DateAdded').eq(datetime('13-03-01')));

alert(j.toString());

//alert(test.toString());

//test.saveLocal();

//var local = joData.loadLocal();
//test.defaultFilter(new joData.FilterClause().Property('AccountId').Eq(1));
//test.setOrderByDefault('AccountNumber', 'desc');

//test.orderBy('AccountName').asc();
// test.resetFilter();
// test.orderBy('test')
// //.top(5)
// //.skip(10)
// //.select(['Name', 'Address'])
// .orFilter(new joData.FilterClause()
// .Substringof('dg', 'TestProp1')
// .Eq(true))
// .orFilter(new joData.FilterClause()
// .Substringof('dg', 'TestProp2')
// .Eq(true))
// .orFilter(new joData.FilterClause()
// .Substringof('dg', 'TestProp3')
// .Eq(true));

//test.resetOrderBy();
//test.resetSelect();
//test.resetFilter();
//alert(local.toString());
var test = new jo('http://foo.bar');
test.filter(new jo.FilterClause('DateAdded').eq(jo.datetime('13-03-01')));

alert(test.toString());

test.saveLocal();

var local = jo.loadLocal();
test.defaultFilter(new jo.FilterClause('AccountId').eq(1));
test.setOrderByDefault('AccountNumber', 'desc');

test.orderBy('AccountName').asc();
test.resetFilter();
test.orderBy('test')
.top(5)
.skip(10)
.select(['Name', 'Address'])
.orFilter(new jo.FilterClause()
.substringof('dg', 'TestProp1')
.eq(true))
.orFilter(new jo.FilterClause()
.substringof('dg', 'TestProp2')
.eq(true))
.orFilter(new jo.FilterClause()
.substringof('dg', 'TestProp3')
.eq(true));

test.resetOrderBy();
test.resetSelect();
test.resetFilter();
alert("local: " + local.toString());


// Raw Test
test.raw("param1", 1);
test.raw("param2", "two");
test.raw(3, 3);

test.expand("more");

alert(test.toString());

})();
</script>
</body>
Expand Down
19 changes: 19 additions & 0 deletions spec/javascripts/specs/joDataSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,13 @@ describe('jo', function () {
});
});

describe('Raw Parameters', function() {
var j = new jo('http://foo.bar');
j.raw("parameter1", 1);
j.raw("parameter2", "two");
expect(j.toString()).toEqual("http://foo.bar?parameter1=1&parameter2=two");
});

describe('Saving to local, the loading from local', function () {
describe('Order By', function () {
it('should cause an $orderby query string parameter to appear upon toString', function () {
Expand Down Expand Up @@ -1796,5 +1803,17 @@ describe('jo', function () {
});
});
});

describe('Raw', function () {
it('should cause a raw parameter on toString', function () {
var j = new jo('http://foo.bar');
j.raw("parameter",100);

j.saveLocal();
var l = jo.loadLocal();

expect(l.toString()).toEqual('http://foo.bar?parameter=100');
});
});
});
});
67 changes: 66 additions & 1 deletion src/joData.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(function (window) {
"use strict";
var jo, FilterObj, Helpers;
var jo, FilterObj, RawObj, Helpers;

jo = function (baseUri) {
if (!Array.remove) {
Expand Down Expand Up @@ -123,6 +123,35 @@
}
};

this.RawSettings = {
Parameters: [],
DefaultParameters: [],
toString: function () {
var i, raw;
raw = "";
if (this.Parameters.length > 0) {
for (i = 0; i < this.Parameters.length; i++) {
raw += '&' + this.Parameters[i].toString();
}
}
return raw.substring(1);
},
reset: function () {
this.Parameters = [];
},
isSet: function () {
return this.Parameters.length > 0 || this.DefaultParameters.length > 0;
},
loadFromJson: function (rawSettings) {
var i, parameter;

for (i = 0; i < rawSettings.Parameters.length; i++) {
parameter = rawSettings.Parameters[i];
this.Parameters.push(new RawObj(parameter.rawParameter,parameter.rawParameterValue));
}
}
};

this.FilterSettings = {
Filters: [],
DefaultFilters: [],
Expand Down Expand Up @@ -382,6 +411,10 @@
this.InlineCountSettings.reset();
return this;
},
raw: function (parameter, parameterValue) {
this.RawSettings.Parameters.push(new RawObj(parameter,parameterValue));
return this;
},
captureFilter: function () {
this.FilterSettings.CapturedFilter = [];
for (var i = 0; i < this.FilterSettings.Filters.length; i++) {
Expand Down Expand Up @@ -442,6 +475,10 @@
url = this.baseUri;
components = [];

if (this.RawSettings.isSet()) {
components.push(this.RawSettings.toString());
}

if (this.OrderBySettings.isSet()) {
components.push(this.OrderBySettings.toString());
}
Expand Down Expand Up @@ -488,11 +525,16 @@
jsonObj.SelectSettings = null;
jsonObj.ExpandSettings = null;
jsonObj.FormatSettings = null;
jsonObj.RawSettings = null;
jsonObj.InlineCountSettings = null;
jsonObj.FilterSettings = null;

jsonObj.defaults = this.defaults;

if (this.RawSettings.isSet()) {
jsonObj.RawSettings = this.RawSettings;
}

if (this.OrderBySettings.isSet()) {
jsonObj.OrderBySettings = this.OrderBySettings;
}
Expand Down Expand Up @@ -608,13 +650,36 @@
}
}

if (json.RawSettings !== null) {
joDataObj.RawSettings.loadFromJson(json.RawSettings);
}

if (json.FilterSettings !== null) {
joDataObj.FilterSettings.loadFromJson(json.FilterSettings);
}

return joDataObj;
};

RawObj = function (rawParameter, rawParameterValue) {
this.rawParameter = null;
this.rawParameterValue = null;
if (rawParameter !== undefined && rawParameter !== null && rawParameterValue !== undefined && rawParameterValue !== null) {
this.rawParameter = rawParameter;
this.rawParameterValue = rawParameterValue;
}

return this;
};

RawObj.prototype = {
rawParameter: null,
rawParameterValue: null,
toString: function () {
return this.rawParameter + '=' + this.rawParameterValue;
}
};

FilterObj = function (filterObj, logicalOperator) {
this.filterObj = filterObj;
this.logicalOperator = null;
Expand Down