From ae66f526786d424258b3a1e415d8a1fee8b5e96f Mon Sep 17 00:00:00 2001 From: Andrew Miner Date: Wed, 28 Jan 2015 10:26:19 -0800 Subject: [PATCH] Add the `findRecipes` method to Mod/Pack/Version --- src/scripts/models/mod.coffee | 4 ++++ src/scripts/models/mod_pack.coffee | 29 +++++++++++++++++++-------- src/scripts/models/mod_version.coffee | 9 +++++++++ test/mod.test.coffee | 2 +- test/mod_pack.test.coffee | 2 +- test/mod_version.test.coffee | 20 +++++++++++++++++- 6 files changed, 55 insertions(+), 11 deletions(-) diff --git a/src/scripts/models/mod.coffee b/src/scripts/models/mod.coffee index 858c33e93..57f4a8d01 100644 --- a/src/scripts/models/mod.coffee +++ b/src/scripts/models/mod.coffee @@ -74,6 +74,10 @@ module.exports = class Mod extends BaseModel return unless @_activeModVersion? @_activeModVersion.findName slug + findRecipes: (slug, result=[])-> + return result unless @_activeModVersion? + @_activeModVersion.findRecipes slug, result + # Property Methods ############################################################################# addModVersion: (modVersion)-> diff --git a/src/scripts/models/mod_pack.coffee b/src/scripts/models/mod_pack.coffee index 249f86d5d..d63613c66 100644 --- a/src/scripts/models/mod_pack.coffee +++ b/src/scripts/models/mod_pack.coffee @@ -40,14 +40,6 @@ module.exports = class ModPack extends BaseModel return null - findName: (slug)-> - for mod in @_mods - continue unless mod.enabled - name = mod.findName slug - return name if name - - return null - findItemDisplay: (slug)-> result = {} item = @findItem slug @@ -66,6 +58,27 @@ module.exports = class ModPack extends BaseModel result.itemUrl = Url.item result return result + findName: (slug)-> + for mod in @_mods + continue unless mod.enabled + name = mod.findName slug + return name if name + + return null + + findRecipes: (slug, result=[])-> + for mod in @_mods + continue unless mod.enabled + mod.findRecipes slug, result + return result + + isGatherable: (slug)-> + item = @findItem slug + return true if not item? + return true if item.isGatherable + return false if item.isCraftable + return true + isValidName: (name)-> slug = _.slugify name for mod in @_mods diff --git a/src/scripts/models/mod_version.coffee b/src/scripts/models/mod_version.coffee index 2bf32ab3c..99628f555 100644 --- a/src/scripts/models/mod_version.coffee +++ b/src/scripts/models/mod_version.coffee @@ -65,6 +65,15 @@ module.exports = class ModVersion extends BaseModel findName: (slug)-> return @_names[slug] + findRecipes: (itemSlug, result=[])-> + for slug in @_slugs + item = @_items[slug] + continue unless item? + + item.eachRecipe (recipe)-> + result.push recipe if recipe.doesProduce itemSlug + return result + registerSlug: (slug, name)-> hasSlug = @_names[slug]? @_names[slug] = name diff --git a/test/mod.test.coffee b/test/mod.test.coffee index baad339a5..024a13016 100644 --- a/test/mod.test.coffee +++ b/test/mod.test.coffee @@ -13,7 +13,7 @@ mod = null ######################################################################################################################## -describe 'Mod', -> +describe 'mod.coffee', -> beforeEach -> mod = new Mod name:'Test', slug:'test' diff --git a/test/mod_pack.test.coffee b/test/mod_pack.test.coffee index 68bbb54c9..883ac49f8 100644 --- a/test/mod_pack.test.coffee +++ b/test/mod_pack.test.coffee @@ -16,7 +16,7 @@ buildcraft = industrialCraft = minecraft = modPack = null ######################################################################################################################## -describe 'ModPack', -> +describe 'mod_pack.coffee', -> beforeEach -> minecraft = new Mod slug:'minecraft' diff --git a/test/mod_version.test.coffee b/test/mod_version.test.coffee index 6914517aa..380565ffd 100644 --- a/test/mod_version.test.coffee +++ b/test/mod_version.test.coffee @@ -14,7 +14,7 @@ modVersion = null ######################################################################################################################## -describe 'ModVersion', -> +describe 'mod_version.coffee', -> beforeEach -> modVersion = new ModVersion modSlug:'test', version:'0.0' @@ -45,3 +45,21 @@ describe 'ModVersion', -> it 'locates items by slugified name', -> modVersion.addItem new Item name:'Crafting Table' modVersion.findItemByName('Crafting Table').slug.should.equal 'crafting_table' + + describe 'findRecipes', -> + + beforeEach -> + modVersion = new ModVersion modSlug:'test', version:'1.0' + modVersion.parse """ + schema:1 + + item: Cake + recipe:; input: Milk, Sugar, Egg, Wheat; pattern: 000 121 333; extras: 3 Bucket + recipe:; input: Milk, Cocoa Beans, Egg, Wheat; pattern: 000 121 333; extras: 3 Bucket + item: Bucket + recipe:; input: Iron Ingot; pattern: ... 0.0 .0. + """ + + it 'finds all recipes which list item as output', -> + recipes = modVersion.findRecipes 'bucket' + (r.output[0].slug for r in recipes).sort().should.eql ['bucket', 'cake', 'cake']