Model.Coerce #19

Open
wants to merge 7 commits into
from

Projects

None yet

2 participants

ebaxt commented Mar 31, 2011

Hi, I had a stab at adding the Model.Coerce that came up in the date serialization discussion. I've added integer, boolean, float and isoDate coercion as a start since that is what I needed, but one can easily add more by adding to Model.Coerce.

The api looks like this:

var Post = Model("post", function() {
  this.persistence(Model.REST, "/posts"),
  this.coerce(Model.Coerce,
  {
    category_id: "integer",
    lat: "float",
    published: "boolean",
    pubDate: "isoDate"
  })
})

If this is something you would like to use I'll add docs and stuff.

Owner

Cool, I'd like to include this in the main repo but probably not as core functionality. Rather, like this potential addition, I'd prefer it to be included manually with some sort of Plugin Architecture™ (probably very simple). What do you think?

ebaxt commented Apr 1, 2011

Sure, that sounds like a good idea. Are you currently working on something like that? If not I could probably give it a shot if you helped me define the API.

Owner

I'm currently preparing the groundwork for it, it'll probably be something like this:

// first argument is the class
function SomeModuleOfFunctionality(klass, a, b) {
  // add some functionality to the class
  // can also add to the klass.prototype
}

// probably applied when declaring the model
var Project = Model("project", function() {
  this.use(SomeModuleOfFunctionality, "plus", "arguments")
}

// but can be called whenever
Project.use(SomethingElse)

update: fix code example

Owner

Looks like @github's new reply-via-email thing needs a little more work...

Owner

I've just pushed a few changes which include a simple "plugin architecture" which is used like so:

// first argument is the class
function SomeModuleOfFunctionality(klass, a, b) {
  // add some functionality to the class
  // can also add to the klass.prototype
}

// probably applied when declaring the model
var Project = Model("project", function() {
  this.use(SomeModuleOfFunctionality, "plus", "arguments")
}

// but can be called whenever
Project.use(SomethingElse)
ebaxt commented Apr 8, 2011

Cool. I'll update my pull request to use the new "plugin architecture".

ebaxt commented Apr 12, 2011

Moved Model.Coerce to Plugin.Coerce to make use of the new "plugin architecture". Not sure how you want to bundle the plugins so I just left it for now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment