Skip to content

multiple where clauses and closure issue #4

@PerterB

Description

@PerterB

Hi,

I have been playing around with the VersionOne JS SDK for node and have a few questions. I based my code on the sample.js file provided with the SDK.

What I'm trying to achieve is a query for Backlog Items where Status.Name is 'Prepared' and Scope.Name is 'My Project'

So I tried this:

v1.query({
    from: "Story",
    where: {
        "Status.Name": "Prepared",
            "Scope.Name": "My Project"
    } // etc.

But that doesn't return any results, if I take out the "Status.Name" or "Scope.Name" property then I get results, I can filter out results based on the property values after they have been returned but it seems it doesn't work when I pass the two values in the 'where' clause. Am I doing something wrong here or is this expected behavior?

Also, I think there may be a defect in the v1meta.js file (or more correctly in the v1meta.coffee file). My 'success' function is being passed the same result object for every invocation. I believe it's down to the following loop in the V1Meta.prototype.query method:

     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        assetxml = _ref[_i];
        oidtoken = assetxml.get('id');
        _ref1 = oidtoken.split(':'), found_type = _ref1[0], found_id = _ref1[1];
        _results.push(_this.get_asset_class(found_type, function(err, Cls) {
          var asset;
          if (err != null) {
            return options.error(err);
          }
          asset = _this.build_asset(Cls, assetxml);
          return options.success(asset);
        }));
      }

The assetxml value is being overwritten everytime the loop iterates, but before the get_asset_class callback is called. Closing over the assetxml variable within the loop resolves it though

        (function(thisAsset) {
            _results.push(_this.get_asset_class(found_type, function(err, Cls) {
              var asset;
              if (err != null) {
                return options.error(err);
              }
              asset = _this.build_asset(Cls, thisAsset);
              return options.success(asset);
            }));
        })(assetxml);

I'm not really familiar enough with coffee script to make any useful contributions however.

I think it would also be useful to pass all the results to the success method rather than each result individually. Or perhaps if all results are passed to a done method instead.

Thanks!

Peter

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions