Skip to content
Merged
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
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ install:
- cd ../
- git clone https://github.com/sealcode/sealious-integration-tests.git integration-tests
- cd integration-tests
- npm install
- git checkout alpha
- npm install .
- npm link sealious
- cd ../sealious
after_success:
Expand Down
2 changes: 1 addition & 1 deletion lib/base-chips/_base-chips.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@ for(const i in field_types){
}


require("./resource_type.user.js");
require("./collection.user.js");
File renamed without changes.
8 changes: 4 additions & 4 deletions lib/base-chips/field-types/single_reference.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
"use strict";
const locreq = require("locreq")(__dirname);
const ResourceType = locreq("lib/chip-types/resource-type.js");
const Collection = locreq("lib/chip-types/collection.js");
const Action = locreq("lib/action.js");

module.exports = {
name: "single_reference",
is_proper_value: function(accept, reject, context, params, new_value){
const resource_type = new ResourceType(params.resource_type);
const resource_type = new Collection(params.resource_type);
let resource_id;
if (typeof new_value === "string"){
resource_id = new_value;
Expand All @@ -31,7 +31,7 @@ module.exports = {
if (decoded_value === undefined){
return undefined;
}
const resource_type = new ResourceType(params.resource_type);
const resource_type = new Collection(params.resource_type);
const resource_id = decoded_value;
const action = new Action(["resources", resource_type.name, resource_id], "show");
return action.perform(context);
Expand All @@ -42,7 +42,7 @@ module.exports = {
filter_to_query: function(context, params, field_filter){
// treating filter as a query here
if (typeof field_filter === "object"){
const resource_type = new ResourceType(params.resource_type);
const resource_type = new Collection(params.resource_type);
return context.run_action(["resources", resource_type.name], "show", {filter: field_filter})
.map(function(resource){
return resource.id;
Expand Down
48 changes: 24 additions & 24 deletions lib/chip-types/resource-type.js → lib/chip-types/collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ const AccessStrategy = require("./access-strategy.js");
const AccessStrategyType = locreq("lib/chip-types/access-strategy-type.js");


const ResourceType = function(declaration){
const Collection = function(declaration){
if (typeof declaration === "string"){
return ChipManager.get_chip("resource_type", declaration);
} else if (declaration instanceof ResourceType){
} else if (declaration instanceof Collection){
return declaration;
}
Chip.call(this, "resource_type", declaration.name);
Expand All @@ -29,7 +29,7 @@ const ResourceType = function(declaration){
};
this._process_declaration(declaration);
};
ResourceType.prototype._process_declaration = function(declaration){
Collection.prototype._process_declaration = function(declaration){
if (declaration){
if (declaration.fields){
for (let i = 0; i < declaration.fields.length; i++){
Expand All @@ -44,7 +44,7 @@ ResourceType.prototype._process_declaration = function(declaration){
this.set_access_strategy(declaration.access_strategy);
}
};
ResourceType.prototype.add_field = function(field_declaration){
Collection.prototype.add_field = function(field_declaration){
const field_object = new Field(field_declaration, this);
const field_name = field_object.name;
if (!this.fields[field_name]){
Expand All @@ -54,21 +54,21 @@ ResourceType.prototype.add_field = function(field_declaration){
throw new Errors.DeveloperError("Duplicate field names: '" + field_name + "' in resource: '" + this.name + "'");
}
};
ResourceType.prototype.add_fields = function(field_declarations_array){
Collection.prototype.add_fields = function(field_declarations_array){
for (const i in field_declarations_array){
const declaration = field_declarations_array[i];
this.add_field(declaration);
}
};
ResourceType.prototype.has_previous_value_sensitive_fields = function(){
Collection.prototype.has_previous_value_sensitive_fields = function(){
for (const field_name in this.fields){
if (this.fields[field_name].has_previous_value_sensitive_methods()){
return true;
}
}
return false;
};
ResourceType.prototype.get_unknown_field_errors = function(values){
Collection.prototype.get_unknown_field_errors = function(values){
const validation_errors = {};
for (const field_name in values){
if (this.fields[field_name] === undefined){
Expand All @@ -77,7 +77,7 @@ ResourceType.prototype.get_unknown_field_errors = function(values){
}
return validation_errors;
};
ResourceType.prototype.get_missing_values_checker = function(values, assume_delete_value_on_missing_key, old_values){
Collection.prototype.get_missing_values_checker = function(values, assume_delete_value_on_missing_key, old_values){
const self = this;
if (assume_delete_value_on_missing_key){
return function(field_name){
Expand All @@ -89,7 +89,7 @@ ResourceType.prototype.get_missing_values_checker = function(values, assume_dele
};
}
};
ResourceType.prototype.get_missing_field_values_errors = function(values, assume_delete_value_on_missing_key, old_values){
Collection.prototype.get_missing_field_values_errors = function(values, assume_delete_value_on_missing_key, old_values){
const self = this;
const errors = {};
const checker_fn = this.get_missing_values_checker(values, assume_delete_value_on_missing_key, old_values);
Expand All @@ -101,7 +101,7 @@ ResourceType.prototype.get_missing_field_values_errors = function(values, assume
return errors;
});
};
ResourceType.prototype.get_invalid_field_values_errors = function(context, values, old_values){
Collection.prototype.get_invalid_field_values_errors = function(context, values, old_values){
const errors = {};
const promises = [];
for (const field_name in values){
Expand All @@ -122,7 +122,7 @@ ResourceType.prototype.get_invalid_field_values_errors = function(context, value
return errors;
});
};
ResourceType.prototype.validate_field_values = function(context, assume_delete_value_on_missing_key, new_values, old_values){
Collection.prototype.validate_field_values = function(context, assume_delete_value_on_missing_key, new_values, old_values){
const self = this;
const errors_array = [
self.get_unknown_field_errors(new_values),
Expand Down Expand Up @@ -153,7 +153,7 @@ ResourceType.prototype.validate_field_values = function(context, assume_delete_v
}
});
};
ResourceType.prototype.encode_field_values = function(context, body, old_body){
Collection.prototype.encode_field_values = function(context, body, old_body){
const promises = {};
for (const field_name in body){
const current_value = body[field_name];
Expand All @@ -166,7 +166,7 @@ ResourceType.prototype.encode_field_values = function(context, body, old_body){
}
return Promise.props(promises);
};
ResourceType.prototype.get_specification = function(with_validators){
Collection.prototype.get_specification = function(with_validators){
// with_validators:boolean - whether to include validator functions in field descriptions. Warning! If set to true, the output is not serializable in JSON.
const resource_type_specification = {};
for (const field_name in this.fields){
Expand All @@ -182,10 +182,10 @@ ResourceType.prototype.get_specification = function(with_validators){
};
return specification;
};
ResourceType.prototype.get_specification_with_validators = function(){
Collection.prototype.get_specification_with_validators = function(){
return this.get_specification(true);
};
ResourceType.prototype.set_access_strategy = function(strategy_declaration){
Collection.prototype.set_access_strategy = function(strategy_declaration){
if (typeof strategy_declaration === "string" ||
strategy_declaration instanceof AccessStrategyType ||
strategy_declaration instanceof Array){
Expand All @@ -199,10 +199,10 @@ ResourceType.prototype.set_access_strategy = function(strategy_declaration){
}
}
};
ResourceType.prototype.get_access_strategy = function(action_name){
Collection.prototype.get_access_strategy = function(action_name){
return this.access_strategy[action_name] || this.access_strategy["default"];
};
ResourceType.prototype.has_large_data_fields = function(){
Collection.prototype.has_large_data_fields = function(){
for (const i in this.fields){
const field = this.fields[i];
if (field.type.handles_large_data){
Expand All @@ -211,15 +211,15 @@ ResourceType.prototype.has_large_data_fields = function(){
}
return false;
};
ResourceType.prototype.is_old_value_sensitive = function(method_name){
Collection.prototype.is_old_value_sensitive = function(method_name){
for (const i in this.fields){
if (this.fields[i].type.is_old_value_sensitive(method_name)){
return true;
}
}
return false;
};
ResourceType.prototype.decode_values = function(context, values){
Collection.prototype.decode_values = function(context, values){
const decoded_values = {};
for (const key in this.fields){
const value = values[key];
Expand All @@ -231,7 +231,7 @@ ResourceType.prototype.decode_values = function(context, values){
}
return Promise.props(decoded_values);
};
ResourceType.prototype._format_decoded_values = function(context, decoded_values, format){
Collection.prototype._format_decoded_values = function(context, decoded_values, format){

const formatted_values = clone(decoded_values);
for (const field_name in formatted_values){
Expand All @@ -243,7 +243,7 @@ ResourceType.prototype._format_decoded_values = function(context, decoded_values
}
return Promise.props(formatted_values);
};
ResourceType.prototype._get_body = function(context, db_document, format){
Collection.prototype._get_body = function(context, db_document, format){
const self = this;
const decoded_values = this.decode_values(context, db_document.body);
if (format){
Expand All @@ -254,7 +254,7 @@ ResourceType.prototype._get_body = function(context, db_document, format){
return decoded_values;
}
};
ResourceType.prototype.get_resource_representation = ResourceType.prototype.decode_db_entry = function(context, db_document, format){
Collection.prototype.get_resource_representation = Collection.prototype.decode_db_entry = function(context, db_document, format){
const representation = {};

representation.created_context = db_document.created_context;
Expand All @@ -268,7 +268,7 @@ ResourceType.prototype.get_resource_representation = ResourceType.prototype.deco
});
};

ResourceType.prototype.check_if_action_is_allowed = function(context, action_name, resource_representation){
Collection.prototype.check_if_action_is_allowed = function(context, action_name, resource_representation){
const access_strategy = this.get_access_strategy(action_name);

return access_strategy.check(context, resource_representation)
Expand All @@ -277,4 +277,4 @@ ResourceType.prototype.check_if_action_is_allowed = function(context, action_nam
});
};

module.exports = ResourceType;
module.exports = Collection;
2 changes: 1 addition & 1 deletion lib/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Sealious.ChipTypes = {
"Channel": require("./chip-types/channel.js"),
"Datastore": require("./chip-types/datastore.js"),
"FieldType": require("./chip-types/field-type.js"),
"ResourceType": require("./chip-types/resource-type.js")
"Collection": require("./chip-types/collection.js")
};

// prefix Sealious.ChipTypes[chip_type_name] to Sealious[chip_type_name]
Expand Down
4 changes: 2 additions & 2 deletions lib/subject/predefined-subjects/resources-subject.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const Errors = locreq("lib/response/error.js");
const ChipManager = locreq("lib/chip-types/chip-manager.js");
const Subject = locreq("lib/subject/subject.js");

const ResourceTypeCollection = require("../subject-types/resource-type-collection-subject.js");
const CollectionSubject = locreq("lib/subject/subject-types/collection-subject.js");

const ResourcesSubject = function(){

Expand All @@ -17,7 +17,7 @@ const ResourcesSubject = function(){
const resource_types = ChipManager.get_chips_by_type("resource_type");
for (const resource_type_name in resource_types){
const resource_type = resource_types[resource_type_name];
this.resource_collections[resource_type_name] = new ResourceTypeCollection(resource_type);
this.resource_collections[resource_type_name] = new CollectionSubject(resource_type);
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@ const merge = require("merge");
const Subject = locreq("lib/subject/subject.js");
const Errors = locreq("lib/response/error.js");

const ResourceFieldTypeSubject = function(resource_type, resource_id, field_name){
this.name = "ResourceFieldTypeSubject";
const CollectionFieldSubject = function(resource_type, resource_id, field_name){
this.name = "CollectionFieldSubject";

this.resource_type = resource_type;
this.resource_id = resource_id;
this.field_name = field_name;
this.field_type = resource_type[field_name].type;
};

ResourceFieldTypeSubject.prototype = Object.create(Subject.prototype);
CollectionFieldSubject.prototype = Object.create(Subject.prototype);

ResourceFieldTypeSubject.prototype.perform_action = function(context, action_name, params){
CollectionFieldSubject.prototype.perform_action = function(context, action_name, params){
params = params || {};
merge(params, {
resource_id: this.resource_id,
Expand All @@ -31,11 +31,11 @@ ResourceFieldTypeSubject.prototype.perform_action = function(context, action_nam
}
};

ResourceFieldTypeSubject.prototype.get_child_subject = function(key){
CollectionFieldSubject.prototype.get_child_subject = function(key){
const self = this;
return Promise.try(function(){
return self.field_type.get_child_subject(key);
});
};

module.exports = ResourceFieldTypeSubject;
module.exports = CollectionFieldSubject;
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ const ChipManager = locreq("lib/chip-types/chip-manager.js");
const Subject = locreq("lib/subject/subject.js");
const Errors = locreq("lib/response/error.js");

const ResourceTypeCollection = function(resource_type){
const CollectionSubject = function(resource_type){
this.resource_type = resource_type;
this.name = "ResourceTypeCollection";
this.name = "Collection";
};

ResourceTypeCollection.prototype = Object.create(Subject.prototype);
CollectionSubject.prototype = Object.create(Subject.prototype);

ResourceTypeCollection.prototype.__create_resource = function(datastore, resource_type, context, body){
CollectionSubject.prototype.__create_resource = function(datastore, resource_type, context, body){
return resource_type.check_if_action_is_allowed(context, "create")
.then(function(){
return resource_type.validate_field_values(context, true, body);
Expand All @@ -39,12 +39,12 @@ ResourceTypeCollection.prototype.__create_resource = function(datastore, resourc
});
};

ResourceTypeCollection.prototype.create_resource = function(context, body){
CollectionSubject.prototype.create_resource = function(context, body){
const self = this;
return ResourceTypeCollection.prototype.__create_resource(ChipManager.get_datastore_chip(), self.resource_type, context, body);
return CollectionSubject.prototype.__create_resource(ChipManager.get_datastore_chip(), self.resource_type, context, body);
};

ResourceTypeCollection.prototype.__preprocess_resource_filter = function(resource_type, context, filter){
CollectionSubject.prototype.__preprocess_resource_filter = function(resource_type, context, filter){
filter = clone(filter) || {};
const expanded_filter = expandHash(filter);
const processed_filter = {};
Expand Down Expand Up @@ -109,7 +109,7 @@ const get_output_options = function(resource_type, params){
return output_options;
};

ResourceTypeCollection.prototype.__list_resources = function(datastore, resource_type, context, params){
CollectionSubject.prototype.__list_resources = function(datastore, resource_type, context, params){
if (params === undefined || params === null){
params = {};
}
Expand All @@ -121,7 +121,7 @@ ResourceTypeCollection.prototype.__list_resources = function(datastore, resource

return resource_type.check_if_action_is_allowed(context, "retrieve")
.then(function(){
return ResourceTypeCollection.prototype.__preprocess_resource_filter(resource_type, context, params.filter);
return CollectionSubject.prototype.__preprocess_resource_filter(resource_type, context, params.filter);
}).then(function(body_filter){
const query = {
type: resource_type.name,
Expand Down Expand Up @@ -164,13 +164,13 @@ ResourceTypeCollection.prototype.__list_resources = function(datastore, resource
});
};

ResourceTypeCollection.prototype.list_resources = function(context, params){
CollectionSubject.prototype.list_resources = function(context, params){
const datastore = ChipManager.get_datastore_chip();
const self = this;
return ResourceTypeCollection.prototype.__list_resources(datastore, self.resource_type, context, params);
return CollectionSubject.prototype.__list_resources(datastore, self.resource_type, context, params);
};

ResourceTypeCollection.prototype.perform_action = function(context, action_name, args){
CollectionSubject.prototype.perform_action = function(context, action_name, args){
switch (action_name){
case "create":
return this.create_resource(context, args);
Expand All @@ -181,10 +181,10 @@ ResourceTypeCollection.prototype.perform_action = function(context, action_name,
}
};

ResourceTypeCollection.prototype.get_child_subject = function(key){
CollectionSubject.prototype.get_child_subject = function(key){
const resource_id = key;
const single_resource_subject = new SingleResource(this.resource_type, resource_id);
return Promise.resolve(single_resource_subject);
};

module.exports = ResourceTypeCollection;
module.exports = CollectionSubject;
Loading