Added examples, improved recipe implementation
This commit is contained in:
		
							
								
								
									
										32
									
								
								examples/bases.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								examples/bases.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require_once __DIR__."/../vendor/autoload.php";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use NoccyLabs\Juicer\Ingredient\Base;
 | 
				
			||||||
 | 
					use NoccyLabs\Juicer\Ingredient\NicotineBase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					printf("Apparent Specific Gravity of base mixes:\n\n");
 | 
				
			||||||
 | 
					printf("   VG   | PG   | ASG\n");
 | 
				
			||||||
 | 
					printf("  ------|------|------------------------\n");
 | 
				
			||||||
 | 
					for ($pg = 0; $pg < 100; $pg += 10) {
 | 
				
			||||||
 | 
					    $base = new Base("PG{$pg}");
 | 
				
			||||||
 | 
					    printf("   %3d%% | %3d%% | %.4fg/mL\n", 100-$pg, $pg, $base->getSpecificGravity());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "\n\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$asgstrength = [ 24, 20, 18, 15 ];
 | 
				
			||||||
 | 
					$asgheader = join("", array_map(function ($s) { return sprintf("%2dmg    ", $s); } , $asgstrength));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					printf("Apparent Specific Gravity of nicotine bases:\n\n");
 | 
				
			||||||
 | 
					printf("   VG   | PG   | %s\n", $asgheader);
 | 
				
			||||||
 | 
					printf("  ------|------|-------------------------------------\n");
 | 
				
			||||||
 | 
					for ($pg = 0; $pg < 100; $pg += 10) {
 | 
				
			||||||
 | 
					    printf("   %3d%% | %3d%% |", 100-$pg, $pg);
 | 
				
			||||||
 | 
					    $base = new Base("PG{$pg}");
 | 
				
			||||||
 | 
					    foreach($asgstrength as $s) {
 | 
				
			||||||
 | 
					        $nicbase = new NicotineBase($base, $s);
 | 
				
			||||||
 | 
					         printf(" %6.4f ", $nicbase->getSpecificGravity());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    printf("\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -24,39 +24,59 @@ class Recipe implements RecipeInterface
 | 
				
			|||||||
    /** @var IngredientInterface[] */
 | 
					    /** @var IngredientInterface[] */
 | 
				
			||||||
    protected $ingredients = [];
 | 
					    protected $ingredients = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function setRecipeName(?string $name)
 | 
					    public function setRecipeName(?string $name): Recipe
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->name = $name;
 | 
					        $this->name = $name;
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function setRecipeAuthor(?string $author)
 | 
					    public function setRecipeAuthor(?string $author): Recipe
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->author = $author;
 | 
					        $this->author = $author;
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function setTags(array $tags)
 | 
					    public function setTags(array $tags): Recipe
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->tags = $tags;
 | 
					        $this->tags = $tags;
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function addTag(string $tag)
 | 
					    public function addTag(string $tag): Recipe
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->tags[] = $tag;
 | 
					        $this->tags[] = $tag;
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function setDescription(?string $description)
 | 
					    public function hasTag(string $tag): bool
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return in_array($tag, $this->tags);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function removeTag(string $tag): Recipe
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->tags = array_filter($this->tags, function ($input) use ($tag) {
 | 
				
			||||||
 | 
					            return $input != $tag;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function setDescription(?string $description): Recipe
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->description = $description;
 | 
					        $this->description = $description;
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function addIngredient(IngredientInterface $ingredient)
 | 
					    public function addIngredient(IngredientInterface $ingredient): Recipe
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->ingredients[] = $ingredient;
 | 
					        $this->ingredients[] = $ingredient;
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function setExtra(array $extra)
 | 
					    public function setExtra(array $extra): Recipe
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->extra = $extra;
 | 
					        $this->extra = $extra;
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,4 +25,33 @@ class RecipeTest extends \PhpUnit\Framework\TestCase
 | 
				
			|||||||
        $this->assertEquals([$ingredient1, $ingredient2], $recipe->getIngredients());
 | 
					        $this->assertEquals([$ingredient1, $ingredient2], $recipe->getIngredients());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testManipulatingRecipeTags()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $recipe = new Recipe();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $recipe
 | 
				
			||||||
 | 
					            ->addTag("foo")
 | 
				
			||||||
 | 
					            ->addTag("bar");
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        $this->assertCount(2, $recipe->getTags());
 | 
				
			||||||
 | 
					        $this->assertTrue($recipe->hasTag("foo"));
 | 
				
			||||||
 | 
					        $this->assertTrue($recipe->hasTag("bar"));
 | 
				
			||||||
 | 
					        $recipe->removeTag("foo");
 | 
				
			||||||
 | 
					        $this->assertCount(1, $recipe->getTags());
 | 
				
			||||||
 | 
					        $this->assertTrue($recipe->hasTag("bar"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $recipe->addTag("baz");
 | 
				
			||||||
 | 
					        $this->assertCount(2, $recipe->getTags());
 | 
				
			||||||
 | 
					        $this->assertFalse($recipe->hasTag("foo"));
 | 
				
			||||||
 | 
					        $this->assertTrue($recipe->hasTag("bar"));
 | 
				
			||||||
 | 
					        $this->assertTrue($recipe->hasTag("baz"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $recipe->setTags(["baz"]);
 | 
				
			||||||
 | 
					        $this->assertCount(1, $recipe->getTags());
 | 
				
			||||||
 | 
					        $this->assertFalse($recipe->hasTag("foo"));
 | 
				
			||||||
 | 
					        $this->assertFalse($recipe->hasTag("bar"));
 | 
				
			||||||
 | 
					        $this->assertTrue($recipe->hasTag("baz"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user