From f18ab69a91cb736efc59fa82b8ae88f61bd1abe2 Mon Sep 17 00:00:00 2001 From: Gibheer Date: Tue, 12 Feb 2013 07:38:26 +0100 Subject: extracted the building of template tree This step is a preparation to extend the functionality of the renderer. To make the main class easier, the search for templates and building of the tree is extracted into its own class. --- .../zero/renderer/read_template_path_bang_spec.rb | 8 +-- spec/unit/zero/renderer/render_spec.rb | 2 +- .../renderer/template_finder/get_templates_spec.rb | 65 ++++++++++++++++++++++ .../renderer/template_finder/initialize_spec.rb | 19 +++++++ 4 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 spec/unit/zero/renderer/template_finder/get_templates_spec.rb create mode 100644 spec/unit/zero/renderer/template_finder/initialize_spec.rb (limited to 'spec/unit') diff --git a/spec/unit/zero/renderer/read_template_path_bang_spec.rb b/spec/unit/zero/renderer/read_template_path_bang_spec.rb index 8655777..948a3cc 100644 --- a/spec/unit/zero/renderer/read_template_path_bang_spec.rb +++ b/spec/unit/zero/renderer/read_template_path_bang_spec.rb @@ -1,14 +1,14 @@ require 'spec_helper' -describe Zero::Renderer, 'read_template_path!' do +describe Zero::Renderer, '#read_template_path!' do subject { Zero::Renderer.new(template_path, type_map) } - let(:template_path) { 'foo' } + let(:template_path) { 'foo/' } let(:file_list) { ['foo/welcome/index.html.erb'] } before :each do Dir.stub(:[]) do |arg| if arg == 'foo/**/*.*' - file_list + file_list else [] end @@ -58,7 +58,7 @@ describe Zero::Renderer, 'read_template_path!' do end it 'creates an empty templates list without templates in path' do - subject = Zero::Renderer.new("bar", {}) + subject = Zero::Renderer.new("bar/", {}) subject.read_template_path! subject.templates.should eq({}) diff --git a/spec/unit/zero/renderer/render_spec.rb b/spec/unit/zero/renderer/render_spec.rb index 30d2225..3270ac3 100644 --- a/spec/unit/zero/renderer/render_spec.rb +++ b/spec/unit/zero/renderer/render_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe Zero::Renderer, '#render' do subject { Zero::Renderer.new(template_path, type_map) } - let(:template_path) { 'spec/fixtures/templates' } + let(:template_path) { 'spec/fixtures/templates/' } let(:type_map) {{ 'html' => ['text/html', 'text/xml', '*/*'], 'json' => ['application/json', 'plain/text'] diff --git a/spec/unit/zero/renderer/template_finder/get_templates_spec.rb b/spec/unit/zero/renderer/template_finder/get_templates_spec.rb new file mode 100644 index 0000000..5928e66 --- /dev/null +++ b/spec/unit/zero/renderer/template_finder/get_templates_spec.rb @@ -0,0 +1,65 @@ +require 'spec_helper' + +describe Zero::Renderer::TemplateFinder, '#initialize' do + subject { described_class.new(template_path, type_map) } + let(:template_path) { 'foo/' } + let(:file_list) { ['foo/welcome/index.html.erb'] } + + before :each do + Dir.stub(:[]) do |arg| + if arg == 'foo/**/*.*' + file_list + else + [] + end + end + end + + shared_examples_for 'a template loader' do + it 'creates a template tree' do + subject.get_templates['welcome/index'].should eq(result) + end + end + + context 'without mapping' do + let(:type_map) { {} } + let(:result) { { 'html' => 'foo/welcome/index.html.erb' } } + + it_behaves_like 'a template loader' + end + + context 'with a single mapping' do + let(:type_map) { {'html' => 'text/html' } } + let(:result) { { 'text/html' => 'foo/welcome/index.html.erb' } } + + it_behaves_like 'a template loader' + end + + context 'with multiple mappings' do + let(:type_map) { {'html' => ['text/html', 'text/xml'] } } + let(:result) { { + 'text/html' => 'foo/welcome/index.html.erb', + 'text/xml' => 'foo/welcome/index.html.erb' + } } + + it_behaves_like 'a template loader' + end + + context 'with default template' do + let(:file_list) {['foo/welcome/index.erb']} + let(:type_map) { {'default' => ['text/html', 'text/xml'] } } + let(:result) { { + 'text/html' => 'foo/welcome/index.erb', + 'text/xml' => 'foo/welcome/index.erb' + } } + + it_behaves_like 'a template loader' + end + + it 'creates an empty templates list without templates in path' do + subject = Zero::Renderer.new("bar/", {}) + subject.read_template_path! + + subject.templates.should eq({}) + end +end diff --git a/spec/unit/zero/renderer/template_finder/initialize_spec.rb b/spec/unit/zero/renderer/template_finder/initialize_spec.rb new file mode 100644 index 0000000..5ed9502 --- /dev/null +++ b/spec/unit/zero/renderer/template_finder/initialize_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe Zero::Renderer::TemplateFinder, '#initialize' do + subject { described_class.new(template_path, type_map) } + let(:template_path) { 'foo/' } + let(:type_map) { {'html' => ['text/html']} } + + its(:path) { should be(template_path) } + its(:path_regex) { should eq(/#{template_path}/) } + its(:type_map) { should be(type_map) } + + context 'with broken path' do + let(:template_path) { 'foo' } + + it "raises an error" do + expect { subject }.to raise_error(ArgumentError, "Has to end on '/'!") + end + end +end -- cgit v1.2.3-70-g09d2