diff --git a/Gemfile b/Gemfile index 766ec5d..65f4904 100644 --- a/Gemfile +++ b/Gemfile @@ -3,5 +3,5 @@ source 'https://rubygems.org' # Specify your gem's dependencies in flowerbox.gemspec gemspec -gem 'flowerbox-delivery', :path => '../flowerbox-delivery' +gem 'guard-flowerbox', :path => '../guard-flowerbox' diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000..155dfd9 --- /dev/null +++ b/Guardfile @@ -0,0 +1,16 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +guard 'rspec', :version => 2 do + watch(%r{^spec/.+_spec\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } + watch('spec/spec_helper.rb') { "spec" } +end + +if false +guard 'cucumber' do + watch(%r{^features/.+\.feature$}) + watch(%r{^features/support/.+$}) { 'features' } + watch(%r{^features/step_definitions/.*$}) { 'features' } +end +end diff --git a/flowerbox.gemspec b/flowerbox.gemspec index 85fc657..75adbe7 100644 --- a/flowerbox.gemspec +++ b/flowerbox.gemspec @@ -17,11 +17,21 @@ Gem::Specification.new do |gem| gem.add_development_dependency 'cucumber' gem.add_development_dependency 'rspec' + gem.add_development_dependency 'simplecov' + gem.add_development_dependency 'mocha' + gem.add_development_dependency 'fakefs' + gem.add_development_dependency 'guard' + gem.add_development_dependency 'guard-flowerbox' + gem.add_development_dependency 'guard-rspec' + gem.add_development_dependency 'guard-cucumber' gem.add_dependency 'jasmine-core' gem.add_dependency 'thor' gem.add_dependency 'selenium-webdriver' gem.add_dependency 'sinatra' gem.add_dependency 'rainbow' + gem.add_dependency 'sprockets' gem.add_dependency 'sprockets-vendor_gems' + gem.add_dependency 'thin' end + diff --git a/lib/flowerbox/server.rb b/lib/flowerbox/server.rb index 2dba072..9a6e8ce 100644 --- a/lib/flowerbox/server.rb +++ b/lib/flowerbox/server.rb @@ -9,29 +9,33 @@ module Flowerbox class Server attr_reader :options + class MissingRackApp < StandardError ; end class ServerDiedError < StandardError ; end def initialize(options = {}) @options = { :logging => false }.merge(options || {}) end + def app + options[:app] || raise(MissingRackApp.new) + end + def start @server_thread = Thread.new do server_options = { :Port => port, :Host => interface } - app = options[:app] - Thin::Logging.silent = !options[:logging] + rack_app = app + if options[:logging] - real_app = app - app = ::Rack::Builder.new do + rack_app = ::Rack::Builder.new do use ::Rack::CommonLogger, STDOUT - run real_app + run app end end - ::Rack::Handler::Thin.run(app, server_options) do |server| + ::Rack::Handler::Thin.run(rack_app, server_options) do |server| Thread.current[:server] = server trap('QUIT') { server.stop } diff --git a/spec/flowerbox/delivery/template_renderer_spec.rb b/spec/flowerbox/delivery/template_renderer_spec.rb deleted file mode 100644 index 7c790d0..0000000 --- a/spec/flowerbox/delivery/template_renderer_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -require 'spec_helper' - -describe Flowerbox::Delivery::TemplateRenderer do - let(:template_renderer) { described_class.new(:template => template, :files => files) } - let(:template) { 'template' } - let(:files) { 'files' } - - let(:rendered_template) { 'rendered template' } - let(:erb_template) { "#{rendered_template} <%= resource_tags %>" } - - describe '#render' do - subject { template_renderer.render } - - let(:rendered_files) { 'with files' } - let(:result) { "#{rendered_template} #{rendered_files}" } - - before do - template_renderer.expects(:resource_tags).returns(rendered_files) - template_renderer.expects(:template).returns(erb_template) - end - - it { should == result } - end - - describe '#template' do - include FakeFS::SpecHelpers - - before do - File.open(template, 'wb') { |fh| fh.print erb_template } - end - - subject { template_renderer.template } - - it { should == erb_template } - end - - describe '#resource_tags' do - subject { template_renderer.resource_tags } - - context 'success' do - let(:files) { [ js, css ] } - let(:js) { 'file.js' } - let(:css) { 'file.css' } - - it { should == [ - %{}, - %{} - ].join } - end - - context 'failure' do - let(:files) { [ 'what.ever' ] } - - it 'should raise error' do - expect { subject }.to raise_error(Flowerbox::Delivery::TemplateRenderer::FileTypeError) - end - end - end -end diff --git a/spec/flowerbox/delivery/tilt/js_template_spec.rb b/spec/flowerbox/delivery/tilt/js_template_spec.rb deleted file mode 100644 index 41a680b..0000000 --- a/spec/flowerbox/delivery/tilt/js_template_spec.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'spec_helper' - -describe Flowerbox::Delivery::Tilt::JSTemplate do - let(:js_template) { described_class.new { '' } } - - describe '#evaluate' do - subject { js_template.evaluate(Object.new, {}) } - - before do - js_template.stubs(:file).returns(file) - end - - context '.js' do - let(:file) { 'file.js' } - - it { should == file } - end - - context 'other extension' do - let(:file) { 'file.coffee' } - let(:temp_file) { 'temp file' } - - before do - js_template.expects(:save).returns(temp_file) - end - - it { should == temp_file } - end - end - - describe '#save' do - include FakeFS::SpecHelpers - - let(:temp_file) { 'dir/temp file' } - let(:data) { 'data' } - - before do - js_template.stubs(:temp_file).returns(temp_file) - js_template.stubs(:data).returns(data) - end - - it 'should save the file to disk and return the temp path' do - js_template.save.should == temp_file - - File.read(temp_file).should == data - end - end - - describe '#temp_file' do - subject { js_template.temp_file } - - let(:filename) { "#{root_filename}.ext" } - let(:root_filename) { "dir/file.js" } - - before do - js_template.stubs(:file).returns(filename) - end - - it { should == File.join(Dir.pwd, '.tmp/sprockets', root_filename) } - end -end - diff --git a/spec/flowerbox/server_spec.rb b/spec/flowerbox/server_spec.rb index 5a73362..33431bd 100644 --- a/spec/flowerbox/server_spec.rb +++ b/spec/flowerbox/server_spec.rb @@ -2,7 +2,9 @@ require 'spec_helper' require 'socket' require 'thread' -describe Flowerbox::Delivery::Server do +require 'flowerbox/server' + +describe Flowerbox::Server do let(:server) { described_class.new(options) } let(:options) { nil } @@ -17,6 +19,30 @@ describe Flowerbox::Delivery::Server do its(:interface) { should == interface } end + describe '#app' do + subject { server.app } + + context 'no app defined' do + before do + server.stubs(:options).returns({}) + end + + it 'should raise an error' do + expect { server.app }.to raise_error(Flowerbox::Server::MissingRackApp) + end + end + + context 'app defined' do + let(:app) { 'app' } + + before do + server.stubs(:options).returns(:app => app) + end + + it { should == app } + end + end + describe '#start' do let(:port) { 12345 } let(:interface) { '127.0.0.1' } diff --git a/spec/flowerbox/sprockets_handler_spec.rb b/spec/flowerbox/sprockets_handler_spec.rb index 2635a7a..6cc5fdc 100644 --- a/spec/flowerbox/sprockets_handler_spec.rb +++ b/spec/flowerbox/sprockets_handler_spec.rb @@ -1,6 +1,7 @@ require 'spec_helper' +require 'flowerbox/sprockets_handler' -describe Flowerbox::Delivery::SprocketsHandler do +describe Flowerbox::SprocketsHandler do let(:sprockets_handler) { described_class.new(options) } let(:options) { { :asset_paths => asset_paths } } let(:asset_paths) { [ File.expand_path('asset path') ] } diff --git a/spec/flowerbox/unique_asset_list_spec.rb b/spec/flowerbox/unique_asset_list_spec.rb index 1def2c1..a9a9ff8 100644 --- a/spec/flowerbox/unique_asset_list_spec.rb +++ b/spec/flowerbox/unique_asset_list_spec.rb @@ -1,12 +1,14 @@ require 'spec_helper' +require 'flowerbox/unique_asset_list' -describe Flowerbox::Delivery::UniqueAssetList do - let(:unique_asset_list) { described_class.new } +describe Flowerbox::UniqueAssetList do + let(:unique_asset_list) { described_class.new(sprockets) } + let(:sprockets) { stub } describe "#add" do - let(:first) { Pathname.new('one') } - let(:second) { Pathname.new('one') } - let(:third) { Pathname.new('two') } + let(:first) { stub(:pathname => Pathname.new('one')) } + let(:second) { stub(:pathname => Pathname.new('one')) } + let(:third) { stub(:pathname => Pathname.new('two')) } it 'should not add assets already added' do unique_asset_list.add(first) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index fe4f8b5..51b7759 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,7 +1,11 @@ -require 'flowerbox-delivery' +require 'simplecov' +SimpleCov.start + require 'mocha' require 'fakefs/spec_helpers' +require 'flowerbox' + RSpec.configure do |c| c.mock_with :mocha end