public void write_gem_file_when_none_exists()
        {
            var context = TemplatePlan.CreateClean("gems");
            var gem     = new GemReference("rake", ">=10.0.3");

            gem.Alter(context);

            var gemFile  = "gems".AppendPath("Gemfile");
            var contents = new FileSystem().ReadStringFromFile(gemFile)
                           .SplitOnNewLine();

            contents.ShouldContain("source 'http://rubygems.org'");
            contents.ShouldContain("gem \"rake\", \">=10.0.3\"");
        }
        public void do_add_gem_to_existing()
        {
            var gemFile = "gems".AppendPath("Gemfile");

            new FileSystem().WriteStringToFile(gemFile, @"source 'http://rubygems.org'

gem ~rake~, ~>=10.0.3~
".Replace("~", "\""));

            var context = TemplatePlan.CreateClean("gems");
            var gem     = new GemReference("fuburake", "~>0.5");

            gem.Alter(context);

            var contents = new FileSystem().ReadStringFromFile(gemFile)
                           .SplitOnNewLine();

            contents.ShouldContain("source 'http://rubygems.org'");
            contents.ShouldContain("gem \"fuburake\", \"~>0.5\""); // didn't change
        }
        public void do_not_add_gem_when_there_is_already_a_reference()
        {
            var gemFile = "gems".AppendPath("Gemfile");


            var context = TemplatePlan.CreateClean("gems");

            new FileSystem().WriteStringToFile(gemFile, @"source 'http://rubygems.org'

gem ~rake~, ~>=10.0.3~
".Replace("~", "\""));

            var gem = new GemReference("rake", ">=10.0.4");

            gem.Alter(context);

            var contents = new FileSystem().ReadStringFromFile(gemFile)
                           .SplitOnNewLine();

            contents.ShouldContain("source 'http://rubygems.org'");
            contents.ShouldContain("gem \"rake\", \">=10.0.3\"");    // didn't change
            contents.ShouldNotContain("gem \"rake\", \">=10.0.4\""); // didn't change
        }