mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Moved the model schemas into a models folder.
This commit is contained in:
parent
5a794306fe
commit
30f785f7cf
35 changed files with 43 additions and 101 deletions
|
@ -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)?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
c = require './schemas'
|
||||
c = require './../schemas'
|
||||
|
||||
ArticleSchema = c.object()
|
||||
c.extendNamedProperties ArticleSchema # name first
|
|
@ -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
|
|
@ -1,5 +1,5 @@
|
|||
c = require './schemas'
|
||||
metaschema = require './metaschema'
|
||||
c = require './../schemas'
|
||||
metaschema = require './../metaschema'
|
||||
|
||||
attackSelfCode = """
|
||||
class AttacksSelf extends Component
|
|
@ -1,4 +1,4 @@
|
|||
c = require './schemas'
|
||||
c = require './../schemas'
|
||||
|
||||
LevelFeedbackLevelSchema = c.object {required: ['original', 'majorVersion']}, {
|
||||
original: c.objectId({})
|
|
@ -1,4 +1,4 @@
|
|||
c = require './schemas'
|
||||
c = require './../schemas'
|
||||
|
||||
LevelSessionPlayerSchema = c.object
|
||||
id: c.objectId
|
|
@ -1,5 +1,5 @@
|
|||
c = require './schemas'
|
||||
metaschema = require './metaschema'
|
||||
c = require './../schemas'
|
||||
metaschema = require './../metaschema'
|
||||
|
||||
jitterSystemCode = """
|
||||
class Jitter extends System
|
|
@ -1,4 +1,4 @@
|
|||
c = require './schemas'
|
||||
c = require './../schemas'
|
||||
|
||||
patchables = ['level', 'thang_type', 'level_system', 'level_component', 'article']
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
c = require './schemas'
|
||||
c = require './../schemas'
|
||||
|
||||
module.exports = ThangComponentSchema = c.object {
|
||||
title: "Component"
|
|
@ -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
|
|
@ -1,4 +1,4 @@
|
|||
c = require './schemas'
|
||||
c = require './../schemas'
|
||||
emailSubscriptions = ['announcement', 'tester', 'level_creator', 'developer', 'article_editor', 'translator', 'support', 'notification']
|
||||
|
||||
UserSchema = c.object {},
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue