npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@gdn/meteor-model

v0.3.2

Published

Implements a basic functionality to build Meteor models that hold business logic, validation and data persistance.

Downloads

14

Readme

travis build

meteor-model

Implements a basic functionality to build Meteor models that hold business logic, validation and data persistance. It's built to work in combination with typescript.

Functionality

1. Assign default attributes
2. Validate records according to its validation rules
3. Generate error messages for every invalid attributes
4. Persist data through a Meteor endpoint (when used in the browser)
5. Persist data through Mongo (when used in Node)

Using it in your project

1. npm install --save @gdn/meteor-model
2. Extend from either meteorModel or baseModel
Use BaseModel if you just need validation and no persistance, MeteorModel contains both.
3. Make sure to set the COLLECTION and COLLECTION_NAME fields with your mongo collection and it's name.
If you use Meteor model on the front-end, for example to save, it will try to use a meteor method called COLLECTION_NAME.save
4. Create (typescript) properties to expose the attributes stored and retrieved by meteorModel
5. (Optional) Use validation rules, or create your own to validate user input either server side or client side(or both)

Example usage

import {MeteorModel, RequiredValidator} from '@gdn/meteor-model';
import {products, productCollectionName} from './collections';

export default class Product extends MeteorModel{
  constructor(initialAttributes:Object) {     
    super(initialAttributes);
  }
  
  private validationRules = {
    name: [new RequiredValidator()],    
    price: [new RequiredValidator()]
  }

  public static COLLECTION_NAME = productCollectionName;
  public static COLLECTION = products;

  public get id(){
    return this._attrs._id;
  }

  public get name(){
    return this._attrs.name;
  }
  
  public get price(){
    return this._attrs.price;
  }
}

After this you can call Product.FindCursor().fetch() to get a typed list of your products, or Product.fetchOne() for a single product, just like you would use find and findOne on a (mini)mongo collection. You can save an object like so:

var prod = new Product( { name: 'shoe', price: 50} );
newProduct.validate();
if(newProduct.isValid()){
  newProduct.save();
} else {
  console.log('validation errors:', newProduct.errors);
}