Moved the model schemas into a models folder.

This commit is contained in:
Scott Erickson 2014-04-12 10:51:02 -07:00
parent 5a794306fe
commit 30f785f7cf
35 changed files with 43 additions and 101 deletions

View file

@ -11,14 +11,11 @@ class CocoModel extends Backbone.Model
initialize: ->
super()
@constructor.schema ?= @urlRoot[4..].replace '.', '_'
@constructor.schema ?= require "schemas/models/#{@urlRoot[4..].replace '.', '_'}"
if not @constructor.className
console.error("#{@} needs a className set.")
@markToRevert()
if @constructor.schema?.loaded
@addSchemaDefaults()
else
@loadSchema()
@addSchemaDefaults()
@once 'sync', @onLoaded, @
@saveBackup = _.debounce(@saveBackup, 500)
@ -34,9 +31,8 @@ class CocoModel extends Backbone.Model
onLoaded: ->
@loaded = true
@loading = false
if @constructor.schema?.loaded
@markToRevert()
@loadFromBackup()
@markToRevert()
@loadFromBackup()
set: ->
res = super(arguments...)
@ -55,18 +51,6 @@ class CocoModel extends Backbone.Model
CocoModel.backedUp[@id] = @
@backedUp = {}
loadSchema: ->
return if @constructor.schema.loading
@constructor.schema = require 'schemas/' + @constructor.schema + '_schema' unless @constructor.schema.loaded
@onConstructorSync()
onConstructorSync: ->
@constructor.schema.loaded = true
@addSchemaDefaults()
@trigger 'schema-loaded'
@hasSchema: -> return @schema?.loaded
schema: -> return @constructor.schema
validate: ->
@ -129,7 +113,7 @@ class CocoModel extends Backbone.Model
@set "permissions", (@get("permissions") or []).concat({access: 'read', target: 'public'})
addSchemaDefaults: ->
return if @addedSchemaDefaults or not @constructor.hasSchema()
return if @addedSchemaDefaults
@addedSchemaDefaults = true
for prop, defaultValue of @constructor.schema.default or {}
continue if @get(prop)?

View file

@ -2,7 +2,6 @@ class SuperModel
constructor: ->
@models = {}
@collections = {}
@schemas = {}
_.extend(@, Backbone.Events)
populateModel: (model) ->
@ -26,11 +25,7 @@ class SuperModel
@removeEventsFromModel(model)
modelLoaded: (model) ->
model.loadSchema()
schema = model.schema()
unless schema.loaded
@schemas[model.urlRoot] = schema
return schema.once('sync', => @modelLoaded(model))
refs = model.getReferencedModels(model.attributes, schema, '/', @shouldLoadProjection)
refs = [] unless @mustPopulate is model or @shouldPopulate(model)
# console.log 'Loaded', model.get('name')
@ -103,9 +98,6 @@ class SuperModel
for model in _.values @models
total += 1
loaded += 1 if model.loaded
for schema in _.values @schemas
total += 1
loaded += 1 if schema.loaded
return 1.0 unless total
return loaded / total

View file

@ -1,4 +1,4 @@
c = require './schemas'
c = require './../schemas'
ArticleSchema = c.object()
c.extendNamedProperties ArticleSchema # name first

View file

@ -1,5 +1,5 @@
c = require './schemas'
ThangComponentSchema = require './thang_component_schema'
c = require './../schemas'
ThangComponentSchema = require './../models/thang_component'
SpecificArticleSchema = c.object()
c.extendNamedProperties SpecificArticleSchema # name first

View file

@ -1,5 +1,5 @@
c = require './schemas'
metaschema = require './metaschema'
c = require './../schemas'
metaschema = require './../metaschema'
attackSelfCode = """
class AttacksSelf extends Component

View file

@ -1,4 +1,4 @@
c = require './schemas'
c = require './../schemas'
LevelFeedbackLevelSchema = c.object {required: ['original', 'majorVersion']}, {
original: c.objectId({})

View file

@ -1,4 +1,4 @@
c = require './schemas'
c = require './../schemas'
LevelSessionPlayerSchema = c.object
id: c.objectId

View file

@ -1,5 +1,5 @@
c = require './schemas'
metaschema = require './metaschema'
c = require './../schemas'
metaschema = require './../metaschema'
jitterSystemCode = """
class Jitter extends System

View file

@ -1,4 +1,4 @@
c = require './schemas'
c = require './../schemas'
patchables = ['level', 'thang_type', 'level_system', 'level_component', 'article']

View file

@ -1,4 +1,4 @@
c = require './schemas'
c = require './../schemas'
module.exports = ThangComponentSchema = c.object {
title: "Component"

View file

@ -1,5 +1,5 @@
c = require './schemas'
ThangComponentSchema = require './thang_component_schema'
c = require './../schemas'
ThangComponentSchema = require './thang_component'
ThangTypeSchema = c.object()
c.extendNamedProperties ThangTypeSchema # name first

View file

@ -1,4 +1,4 @@
c = require './schemas'
c = require './../schemas'
emailSubscriptions = ['announcement', 'tester', 'level_creator', 'developer', 'article_editor', 'translator', 'support', 'notification']
UserSchema = c.object {},

View file

@ -14,12 +14,6 @@ module.exports = class JobProfileView extends CocoView
'updated'
]
constructor: (options) ->
super options
unless me.schema().loaded
@addSomethingToLoad("user_schema")
@listenToOnce me, 'schema-loaded', => @somethingLoaded 'user_schema'
afterRender: ->
super()
return if @loading()
@ -29,6 +23,7 @@ module.exports = class JobProfileView extends CocoView
visibleSettings = @editableSettings.concat @readOnlySettings
data = _.pick (me.get('jobProfile') ? {}), (value, key) => key in visibleSettings
data.name ?= (me.get('firstName') + ' ' + me.get('lastName')).trim() if me.get('firstName')
console.log 'schema?', me.schema()
schema = _.cloneDeep me.schema().properties.jobProfile
schema.properties = _.pick schema.properties, (value, key) => key in visibleSettings
schema.required = _.intersection schema.required, visibleSettings

View file

@ -43,11 +43,7 @@ module.exports = class SettingsView extends View
@jobProfileView = new JobProfileView()
@listenTo @jobProfileView, 'change', @save
@insertSubView @jobProfileView
if me.schema().loaded
@buildPictureTreema()
else
@listenToOnce me, 'schema-loaded', @buildPictureTreema
@buildPictureTreema()
chooseTab: (category) ->
id = "##{category}-pane"

View file

@ -35,17 +35,11 @@ module.exports = class ArticleEditView extends View
)
@article.fetch()
@article.loadSchema()
@listenToOnce(@article, 'sync', @onArticleSync)
@listenToOnce(@article, 'schema-loaded', @buildTreema)
@listenToOnce(@article, 'sync', @buildTreema)
@pushChangesToPreview = _.throttle(@pushChangesToPreview, 500)
onArticleSync: ->
@article.loaded = true
@buildTreema()
buildTreema: ->
return if @treema? or (not @article.loaded) or (not Article.hasSchema())
return if @treema? or (not @article.loaded)
unless @article.attributes.body
@article.set('body', '')
@startsLoading = false

View file

@ -20,9 +20,6 @@ module.exports = class ThangComponentEditView extends CocoView
render: =>
return if @destroyed
for model in [Level, LevelComponent]
temp = new model()
@listenToOnce temp, 'schema-loaded', @render unless model.schema?.loaded
if not @componentCollection
@componentCollection = @supermodel.getCollection new ComponentsCollection()
unless @componentCollection.loaded
@ -32,7 +29,7 @@ module.exports = class ThangComponentEditView extends CocoView
afterRender: ->
super()
return @showLoading() unless @componentCollection?.loaded and Level.schema.loaded and LevelComponent.schema.loaded
return @showLoading() unless @componentCollection?.loaded
@hideLoading()
@buildExtantComponentTreema()
@buildAddComponentTreema()

View file

@ -61,12 +61,11 @@ module.exports = class ThangTypeEditView extends View
)
@thangType.fetch()
@thangType.loadSchema()
@listenToOnce(@thangType, 'sync', @onThangTypeSync)
@refreshAnimation = _.debounce @refreshAnimation, 500
onThangTypeSync: ->
return unless @thangType.loaded and ThangType.hasSchema()
return unless @thangType.loaded
@startsLoading = false
@files = new DocumentFiles(@thangType)
@files.fetch()

View file

@ -4,7 +4,7 @@ Handler = require('../commons/Handler')
ArticleHandler = class ArticleHandler extends Handler
modelClass: Article
editableProperties: ['body', 'name', 'i18n']
jsonSchema: require './article_schema'
jsonSchema: require '../../app/schemas/models/article'
hasAccess: (req) ->
req.method is 'GET' or req.user?.isAdmin()

View file

@ -10,21 +10,6 @@ module.exports.handlers =
'thang_type': 'levels/thangs/thang_type_handler'
'user': 'users/user_handler'
module.exports.schemas =
'article': 'articles/article_schema'
'common': 'commons/schemas'
'i18n': 'commons/i18n_schema'
'level': 'levels/level_schema'
'level_component': 'levels/components/level_component_schema'
'level_feedback': 'levels/feedbacks/level_feedback_schema'
'level_session': 'levels/sessions/level_session_schema'
'level_system': 'levels/systems/level_system_schema'
'metaschema': 'commons/metaschema'
'patch': 'patches/patch_schema'
'thang_component': 'levels/thangs/thang_component_schema'
'thang_type': 'levels/thangs/thang_type_schema'
'user': 'users/user_schema'
module.exports.routes =
[
'routes/auth'

View file

@ -1,6 +1,6 @@
mongoose = require('mongoose')
plugins = require('../plugins/plugins')
jsonschema = require('../../app/schemas/level_schema')
jsonschema = require('../../app/schemas/models/level')
LevelSchema = new mongoose.Schema({
description: String

View file

@ -1,6 +1,6 @@
mongoose = require('mongoose')
plugins = require('../../plugins/plugins')
jsonschema = require('../../../app/schemas/level_component_schema')
jsonschema = require('../../../app/schemas/models/level_component')
LevelComponentSchema = new mongoose.Schema {
description: String

View file

@ -3,7 +3,7 @@ Handler = require('../../commons/Handler')
LevelComponentHandler = class LevelComponentHandler extends Handler
modelClass: LevelComponent
jsonSchema: require '../../../app/schemas/level_component_schema'
jsonSchema: require '../../../app/schemas/models/level_component'
editableProperties: [
'system'
'description'

View file

@ -2,7 +2,7 @@
mongoose = require('mongoose')
plugins = require('../../plugins/plugins')
jsonschema = require('../../../app/schemas/level_feedback_schema')
jsonschema = require('../../../app/schemas/models/level_feedback')
LevelFeedbackSchema = new mongoose.Schema({
created:

View file

@ -4,7 +4,7 @@ Handler = require('../../commons/Handler')
class LevelFeedbackHandler extends Handler
modelClass: LevelFeedback
editableProperties: ['rating', 'review', 'level', 'levelID', 'levelName']
jsonSchema: require '../../../app/schemas/level_feedback_schema'
jsonSchema: require '../../../app/schemas/models/level_feedback'
makeNewInstance: (req) ->
feedback = super(req)

View file

@ -8,7 +8,7 @@ mongoose = require('mongoose')
LevelHandler = class LevelHandler extends Handler
modelClass: Level
jsonSchema: require '../../app/schemas/level_schema'
jsonSchema: require '../../app/schemas/models/level'
editableProperties: [
'description'
'documentation'

View file

@ -2,7 +2,7 @@
mongoose = require('mongoose')
plugins = require('../../plugins/plugins')
jsonschema = require('../../../app/schemas/level_session_schema')
jsonschema = require('../../../app/schemas/models/level_session')
LevelSessionSchema = new mongoose.Schema({
created:

View file

@ -9,7 +9,7 @@ class LevelSessionHandler extends Handler
editableProperties: ['multiplayer', 'players', 'code', 'completed', 'state',
'levelName', 'creatorName', 'levelID', 'screenshot',
'chat', 'teamSpells', 'submitted', 'unsubscribed']
jsonSchema: require '../../../app/schemas/level_session_schema'
jsonSchema: require '../../../app/schemas/models/level_session'
getByRelationship: (req, res, args...) ->
return @getActiveSessions req, res if args.length is 2 and args[1] is 'active'

View file

@ -1,6 +1,6 @@
mongoose = require('mongoose')
plugins = require('../../plugins/plugins')
jsonschema = require('../../../app/schemas/level_system_schema')
jsonschema = require('../../../app/schemas/models/level_system')
LevelSystemSchema = new mongoose.Schema {
description: String

View file

@ -13,7 +13,7 @@ LevelSystemHandler = class LevelSystemHandler extends Handler
'configSchema'
]
postEditableProperties: ['name']
jsonSchema: require '../../../app/schemas/level_system_schema'
jsonSchema: require '../../../app/schemas/models/level_system'
getEditableProperties: (req, document) ->
props = super(req, document)

View file

@ -3,7 +3,7 @@ Handler = require('../../commons/Handler')
ThangTypeHandler = class ThangTypeHandler extends Handler
modelClass: ThangType
jsonSchema: require '../../../app/schemas/thang_type_schema'
jsonSchema: require '../../../app/schemas/models/thang_type'
editableProperties: [
'name',
'raw',

View file

@ -1,6 +1,6 @@
Patch = require('./Patch')
Handler = require('../commons/Handler')
schema = require '../../app/schemas/patch_schema'
schema = require '../../app/schemas/models/patch'
{handlers} = require '../commons/mapping'
mongoose = require('mongoose')
@ -8,7 +8,7 @@ PatchHandler = class PatchHandler extends Handler
modelClass: Patch
editableProperties: []
postEditableProperties: ['delta', 'target', 'commitMessage']
jsonSchema: require '../../app/schemas/patch_schema'
jsonSchema: require '../../app/schemas/models/patch'
makeNewInstance: (req) ->
patch = super(req)

View file

@ -1,7 +1,6 @@
log = require 'winston'
errors = require '../commons/errors'
handlers = require('../commons/mapping').handlers
schemas = require('../commons/mapping').schemas
mongoose = require 'mongoose'
module.exports.setup = (app) ->
@ -48,7 +47,7 @@ module.exports.setup = (app) ->
getSchema = (req, res, moduleName) ->
try
name = moduleName.replace '.', '_'
schema = require('../../app/schemas/' + name + '_schema')
schema = require('../../app/schemas/models/' + name)
res.send(JSON.stringify(schema, null, '\t'))
res.end()

View file

@ -1,5 +1,5 @@
mongoose = require('mongoose')
jsonschema = require('../../app/schemas/user_schema')
jsonschema = require('../../app/schemas/models/user')
crypto = require('crypto')
{salt, isProduction} = require('../../server_config')
mail = require '../commons/mail'

View file

@ -1,4 +1,4 @@
schema = require '../../app/schemas/user_schema'
schema = require '../../app/schemas/models/user'
crypto = require 'crypto'
request = require 'request'
User = require './User'

View file

@ -33,6 +33,7 @@ describe '/db/article', ->
new_article = _.clone(articles[0])
new_article.body = '...'
request.post {uri:url, json:new_article}, (err, res, body) ->
console.log 'new article?', body
expect(res.statusCode).toBe(200)
expect(body.version.major).toBe(0)
expect(body.version.minor).toBe(1)