diff --git a/README.md b/README.md index d43935d..a5779c6 100644 --- a/README.md +++ b/README.md @@ -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: @@ -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 diff --git a/example/tests.html b/example/tests.html index 6966afc..616ae5c 100644 --- a/example/tests.html +++ b/example/tests.html @@ -6,41 +6,48 @@ diff --git a/spec/javascripts/specs/joDataSpec.js b/spec/javascripts/specs/joDataSpec.js index b4b7fa8..e249825 100644 --- a/spec/javascripts/specs/joDataSpec.js +++ b/spec/javascripts/specs/joDataSpec.js @@ -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¶meter2=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 () { @@ -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'); + }); + }); }); }); diff --git a/src/joData.js b/src/joData.js index 9119e74..bddade3 100644 --- a/src/joData.js +++ b/src/joData.js @@ -1,6 +1,6 @@ (function (window) { "use strict"; - var jo, FilterObj, Helpers; + var jo, FilterObj, RawObj, Helpers; jo = function (baseUri) { if (!Array.remove) { @@ -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: [], @@ -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++) { @@ -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()); } @@ -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; } @@ -608,6 +650,10 @@ } } + if (json.RawSettings !== null) { + joDataObj.RawSettings.loadFromJson(json.RawSettings); + } + if (json.FilterSettings !== null) { joDataObj.FilterSettings.loadFromJson(json.FilterSettings); } @@ -615,6 +661,25 @@ 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;